@miiajs/uws-server 0.1.0

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Ruslan Matiushev
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,44 @@
1
+ # @miiajs/uws-server
2
+
3
+ uWebSockets.js HTTP server adapter for MiiaJS.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @miiajs/uws-server uWebSockets.js
9
+ ```
10
+
11
+ ## Documentation
12
+
13
+ **[miiajs.com/docs/packages/uws-server](https://miiajs.com/docs/packages/uws-server)**
14
+
15
+ ## Troubleshooting
16
+
17
+ ### Native module fails to load on Debian 12 / older glibc systems
18
+
19
+ `uWebSockets.js` ≥20.61.0 ships a prebuilt native binary that depends on a
20
+ newer glibc than what Debian 12 (bookworm) provides. On affected systems you
21
+ will see at startup:
22
+
23
+ ```
24
+ Error: This version of uWS.js supports only Node.js versions ...
25
+ TypeError: symbol 'napi_register_module_v1' not found in native module
26
+ ```
27
+
28
+ **Why we can't simply downgrade:** `@miiajs/uws-server` uses APIs introduced
29
+ in `uWebSockets.js@20.61.0`, so pinning an older version will break the
30
+ adapter at build/startup.
31
+
32
+ **Workarounds (in order of preference):**
33
+
34
+ 1. **Use a newer base image / OS** - Debian 13, Ubuntu 24.04, or any distro with
35
+ glibc ≥2.38. This is the only solution that keeps full uWS performance.
36
+ 2. **Switch to `@miiajs/node-server`** - same API surface (`app.listen(port, host, serve)`),
37
+ slightly lower throughput but no native dependency. Drop-in replacement for
38
+ environments where the host OS cannot be upgraded.
39
+ 3. **Track upstream** - follow https://github.com/uNetworking/uWebSockets.js/issues
40
+ for an official fix; once published, MiiaJS will adopt it without breaking changes.
41
+
42
+ ## License
43
+
44
+ MIT
@@ -0,0 +1,20 @@
1
+ interface LoggerLike {
2
+ error(message: string, trace?: string, context?: string): void;
3
+ }
4
+ export interface ServeOptions {
5
+ fetch: (req: Request) => Response | Promise<Response>;
6
+ port?: number;
7
+ hostname?: string;
8
+ /** @default 'optimized' */
9
+ mode?: 'optimized' | 'native';
10
+ /** Bodies with Content-Length <= threshold are buffered as Promise<Uint8Array> for fast path.
11
+ * Larger or without Content-Length → ReadableStream. @default 102400 (100KB) */
12
+ bufferThreshold?: number;
13
+ /** Logger for unhandled handler errors. Defaults to `console`. Miia passes its internal logger automatically when used via `app.listen(port, hostname, serve)`. */
14
+ logger?: LoggerLike;
15
+ }
16
+ export declare const serve: ({ port, hostname, fetch: handler, mode, bufferThreshold, logger, }: ServeOptions) => Promise<{
17
+ close(): Promise<void>;
18
+ }>;
19
+ export {};
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAuZA,UAAU,UAAU;IAClB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC/D;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IACrD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,2BAA2B;IAC3B,IAAI,CAAC,EAAE,WAAW,GAAG,QAAQ,CAAA;IAC7B;qFACiF;IACjF,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,mKAAmK;IACnK,MAAM,CAAC,EAAE,UAAU,CAAA;CACpB;AAED,eAAO,MAAM,KAAK,GAAU,oEAOzB,YAAY,KAAG,OAAO,CAAC;IAAE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAsPnD,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,599 @@
1
+ /**
2
+ * @miiajs/uws-server - uWebSockets.js HTTP server for Web API frameworks.
3
+ *
4
+ * Requires `uWebSockets.js` to be installed separately:
5
+ * bun add uWebSockets.js@uNetworking/uWebSockets.js#v20.64.0
6
+ *
7
+ * Usage:
8
+ * import { serve } from '@miiajs/uws-server';
9
+ * serve({ fetch: app.fetch, port: 3000 });
10
+ *
11
+ * ## Architecture
12
+ *
13
+ * uWS HttpRequest is only valid synchronously - method, url, and headers
14
+ * must be read before any async gap. Small bodies are accumulated natively
15
+ * in C++ via res.collectBody(). Large bodies arrive via res.onData() and
16
+ * are bridged to a ReadableStream for true streaming.
17
+ *
18
+ * ## Modes
19
+ *
20
+ * - **optimized** (default) - lazy Request proxy, LightResponse CACHE,
21
+ * sync handler path, lazy AbortController. For simple responses
22
+ * (string/null/Uint8Array), the entire request-response cycle is
23
+ * fully synchronous - zero Promises, one cork, one syscall.
24
+ *
25
+ * - **native** - standard Web API Request/Response objects,
26
+ * no proxies, no global overrides, full spec compliance.
27
+ * Safe for strict instanceof checks.
28
+ *
29
+ * After res.onAborted() fires, calling any method on res is undefined
30
+ * behavior - every res.cork/write/end call is guarded by an `aborted` flag.
31
+ *
32
+ * ## Known Limitations (optimized mode)
33
+ *
34
+ * - Body can only be consumed once (matches Web API spec).
35
+ * - clone() returns a GlobalResponse, not LightResponse.
36
+ * - Multiple serve instances: second close() restores GlobalResponse,
37
+ * which may break a still-running first instance.
38
+ */
39
+ // ─── Symbols ─────────────────────────────────────────────────
40
+ /** Marker for LightResponse cached tuple: [status, body, headers] */
41
+ const CACHE = Symbol('responseCache');
42
+ const textDecoder = new TextDecoder();
43
+ const EMPTY_U8 = new Uint8Array(0);
44
+ const DEFAULT_BUFFER_THRESHOLD = 102_400; // 100KB
45
+ // ─── Lightweight Headers Proxy (optimized mode) ─────────────
46
+ //
47
+ // Linear scan over headerPairs instead of new Headers().
48
+ // uWS header keys are already lowercase - only the input name needs lowering.
49
+ const headersProto = {
50
+ get(name) {
51
+ const lower = name.toLowerCase();
52
+ const pairs = this._pairs;
53
+ let result = null;
54
+ for (let i = 0; i < pairs.length; i++) {
55
+ if (pairs[i][0] === lower) {
56
+ result = result === null ? pairs[i][1] : result + ', ' + pairs[i][1];
57
+ }
58
+ }
59
+ return result;
60
+ },
61
+ has(name) {
62
+ return this.get(name) !== null;
63
+ },
64
+ forEach(callback) {
65
+ for (const [k, v] of this._pairs)
66
+ callback(v, k, this);
67
+ },
68
+ entries() {
69
+ return this._pairs[Symbol.iterator]();
70
+ },
71
+ keys() {
72
+ return this._pairs.map((p) => p[0])[Symbol.iterator]();
73
+ },
74
+ values() {
75
+ return this._pairs.map((p) => p[1])[Symbol.iterator]();
76
+ },
77
+ [Symbol.iterator]() {
78
+ return this.entries();
79
+ },
80
+ getSetCookie() {
81
+ return this._pairs.filter((p) => p[0] === 'set-cookie').map((p) => p[1]);
82
+ },
83
+ };
84
+ function createHeadersProxy(pairs) {
85
+ const proxy = Object.create(headersProto);
86
+ proxy._pairs = pairs;
87
+ return proxy;
88
+ }
89
+ // ─── Lightweight Request Proxy (optimized mode) ─────────────
90
+ //
91
+ // Object.create(requestProto) is ~100x cheaper than new Request().
92
+ // Properties accessed on the hot path (url, method) are simple reads.
93
+ // Everything else is lazy - created only when accessed.
94
+ const requestProto = {
95
+ get method() {
96
+ return this._method;
97
+ },
98
+ get url() {
99
+ return (this._url ??= `http://${this._host || `${this._hostname}:${this._port}`}${this._pathname}${this._search ? '?' + this._search : ''}`);
100
+ },
101
+ get headers() {
102
+ return (this._headers ??= createHeadersProxy(this._headerPairs));
103
+ },
104
+ get signal() {
105
+ if (!this._ac) {
106
+ this._ac = new AbortController();
107
+ if (this._aborted)
108
+ this._ac.abort(new Error('Client connection closed'));
109
+ }
110
+ return this._ac.signal;
111
+ },
112
+ /** Create real Request - only for rare operations (blob, formData, clone) */
113
+ _getReal() {
114
+ if (!this._real) {
115
+ const init = { method: this._method, headers: this._headerPairs };
116
+ if (this._bodyPromise) {
117
+ const buf = this._bodyBuffer;
118
+ if (buf && buf.byteLength > 0) {
119
+ init.body = buf; // Uint8Array is a valid BodyInit
120
+ }
121
+ else if (!buf) {
122
+ const p = this._bodyPromise;
123
+ init.body = new ReadableStream({
124
+ async start(c) {
125
+ try {
126
+ const b = await p;
127
+ if (b.byteLength > 0)
128
+ c.enqueue(b);
129
+ c.close();
130
+ }
131
+ catch (e) {
132
+ c.error(e);
133
+ }
134
+ },
135
+ });
136
+ init.duplex = 'half';
137
+ }
138
+ }
139
+ else if (this._body) {
140
+ init.body = this._body;
141
+ init.duplex = 'half';
142
+ }
143
+ if (this._ac)
144
+ init.signal = this._ac.signal;
145
+ this._real = new Request(this.url, init);
146
+ }
147
+ return this._real;
148
+ },
149
+ // ── Buffer helper: resolve body promise, cache result ──
150
+ async _getBuffer() {
151
+ if (this._bodyBuffer !== null)
152
+ return this._bodyBuffer;
153
+ if (!this._bodyPromise)
154
+ return EMPTY_U8;
155
+ this._bodyBuffer = await this._bodyPromise;
156
+ return this._bodyBuffer;
157
+ },
158
+ // ── Body consumers: buffer fast path, stream fallback ──
159
+ async json() {
160
+ if (this._bodyPromise) {
161
+ const buf = await this._getBuffer();
162
+ return JSON.parse(textDecoder.decode(buf));
163
+ }
164
+ return this._getReal().json();
165
+ },
166
+ async text() {
167
+ if (this._bodyPromise) {
168
+ const buf = await this._getBuffer();
169
+ return textDecoder.decode(buf);
170
+ }
171
+ return this._getReal().text();
172
+ },
173
+ async arrayBuffer() {
174
+ if (this._bodyPromise) {
175
+ const buf = await this._getBuffer();
176
+ return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
177
+ }
178
+ return this._getReal().arrayBuffer();
179
+ },
180
+ get body() {
181
+ // Stream path - original ReadableStream
182
+ if (this._body)
183
+ return this._body;
184
+ // Buffer path - lazy stream from buffer (cached)
185
+ if (this._bodyPromise) {
186
+ if (!this._bodyStream) {
187
+ const self = this;
188
+ this._bodyStream = new ReadableStream({
189
+ async start(controller) {
190
+ try {
191
+ const buf = await self._getBuffer();
192
+ if (buf.byteLength > 0)
193
+ controller.enqueue(buf);
194
+ controller.close();
195
+ }
196
+ catch (e) {
197
+ controller.error(e);
198
+ }
199
+ },
200
+ });
201
+ }
202
+ return this._bodyStream;
203
+ }
204
+ return null;
205
+ },
206
+ get bodyUsed() {
207
+ return this._bodyBuffer !== null || (this._real?.bodyUsed ?? false);
208
+ },
209
+ // Rare path - delegate to real Request
210
+ blob() {
211
+ return this._getReal().blob();
212
+ },
213
+ formData() {
214
+ return this._getReal().formData();
215
+ },
216
+ clone() {
217
+ return this._getReal().clone();
218
+ },
219
+ // Static spec-compliant defaults
220
+ get cache() {
221
+ return 'default';
222
+ },
223
+ get credentials() {
224
+ return 'same-origin';
225
+ },
226
+ get destination() {
227
+ return '';
228
+ },
229
+ get integrity() {
230
+ return '';
231
+ },
232
+ get keepalive() {
233
+ return false;
234
+ },
235
+ get mode() {
236
+ return 'cors';
237
+ },
238
+ get redirect() {
239
+ return 'follow';
240
+ },
241
+ get referrer() {
242
+ return '';
243
+ },
244
+ get referrerPolicy() {
245
+ return '';
246
+ },
247
+ };
248
+ function createRequestProxy(method, headerPairs, body, bodyPromise, host, hostname, port, pathname, query) {
249
+ const proxy = Object.create(requestProto);
250
+ proxy._method = method;
251
+ proxy._host = host;
252
+ proxy._hostname = hostname;
253
+ proxy._port = port;
254
+ proxy._pathname = pathname;
255
+ proxy._search = query;
256
+ proxy._url = null;
257
+ proxy._headerPairs = headerPairs;
258
+ proxy._headers = null;
259
+ proxy._body = body;
260
+ proxy._bodyPromise = bodyPromise;
261
+ proxy._bodyBuffer = null;
262
+ proxy._bodyStream = null;
263
+ proxy._ac = null;
264
+ proxy._real = null;
265
+ proxy._aborted = false;
266
+ return proxy;
267
+ }
268
+ // ─── Cached Response (LightResponse, optimized mode) ────────
269
+ //
270
+ // Replaces globalThis.Response. For string/null/Uint8Array bodies,
271
+ // stores [status, body, headers] in CACHE symbol - no GlobalResponse
272
+ // created. Adapter reads CACHE directly for cork + end.
273
+ const GlobalResponse = globalThis.Response;
274
+ class LightResponse {
275
+ #body;
276
+ #init;
277
+ #real;
278
+ [CACHE];
279
+ constructor(body, init) {
280
+ this.#body = body ?? null;
281
+ this.#init = init;
282
+ if (body === null || typeof body === 'string' || body instanceof Uint8Array) {
283
+ const h = init?.headers;
284
+ this[CACHE] = [
285
+ init?.status ?? 200,
286
+ body,
287
+ h == null ? null : h instanceof Headers ? h : new Headers(h),
288
+ ];
289
+ }
290
+ }
291
+ /** Create real GlobalResponse - only for streaming/advanced operations */
292
+ #getReal() {
293
+ return (this.#real ??= new GlobalResponse(this.#body, this.#init));
294
+ }
295
+ get status() {
296
+ return this[CACHE]?.[0] ?? this.#getReal().status;
297
+ }
298
+ get statusText() {
299
+ return this.#init?.statusText ?? '';
300
+ }
301
+ get ok() {
302
+ return this.status >= 200 && this.status < 300;
303
+ }
304
+ get headers() {
305
+ if (this[CACHE]) {
306
+ return (this[CACHE][2] ??= new Headers());
307
+ }
308
+ return this.#getReal().headers;
309
+ }
310
+ get body() {
311
+ return this.#getReal().body;
312
+ }
313
+ get bodyUsed() {
314
+ return this.#real?.bodyUsed ?? false;
315
+ }
316
+ get type() {
317
+ return 'default';
318
+ }
319
+ get url() {
320
+ return '';
321
+ }
322
+ get redirected() {
323
+ return false;
324
+ }
325
+ clone() {
326
+ return this.#getReal().clone();
327
+ }
328
+ json() {
329
+ return this.#getReal().json();
330
+ }
331
+ text() {
332
+ return this.#getReal().text();
333
+ }
334
+ arrayBuffer() {
335
+ return this.#getReal().arrayBuffer();
336
+ }
337
+ blob() {
338
+ return this.#getReal().blob();
339
+ }
340
+ formData() {
341
+ return this.#getReal().formData();
342
+ }
343
+ bytes() {
344
+ return this.#getReal().bytes();
345
+ }
346
+ static json(data, init) {
347
+ const body = JSON.stringify(data);
348
+ const headers = init?.headers ? new Headers(init.headers) : new Headers();
349
+ headers.set('content-type', 'application/json');
350
+ return new LightResponse(body, { ...init, headers });
351
+ }
352
+ static redirect(url, status = 302) {
353
+ return new LightResponse(null, { status, headers: { Location: url } });
354
+ }
355
+ static error() {
356
+ return new GlobalResponse(null, { status: 0 });
357
+ }
358
+ }
359
+ // Prototype chain: instanceof GlobalResponse checks pass for LightResponse
360
+ Object.setPrototypeOf(LightResponse, GlobalResponse);
361
+ Object.setPrototypeOf(LightResponse.prototype, GlobalResponse.prototype);
362
+ export const serve = async ({ port = 3000, hostname = '0.0.0.0', fetch: handler, mode = 'optimized', bufferThreshold = DEFAULT_BUFFER_THRESHOLD, logger = console, }) => {
363
+ const native = mode === 'native';
364
+ let listenSocket = null;
365
+ if (!native) {
366
+ Object.defineProperty(globalThis, 'Response', { value: LightResponse, configurable: true });
367
+ }
368
+ const uWS = await import('uWebSockets.js');
369
+ const app = (uWS.default ?? uWS).App();
370
+ app.any('/*', (res, req) => {
371
+ let aborted = false;
372
+ // ── 1. Sync: read request metadata before async gap ─────
373
+ const method = req.getCaseSensitiveMethod().toUpperCase();
374
+ const query = req.getQuery();
375
+ const path = req.getUrl();
376
+ const headerPairs = [];
377
+ let host = '';
378
+ let contentLength = -1;
379
+ req.forEach((key, value) => {
380
+ headerPairs.push([key, value]);
381
+ if (key === 'host')
382
+ host = value;
383
+ else if (key === 'content-length')
384
+ contentLength = +value;
385
+ });
386
+ // ── 2. Sync: set up body stream ─────────────────────────
387
+ const hasBody = method !== 'GET' && method !== 'HEAD';
388
+ const shouldBuffer = !native && hasBody && contentLength >= 0 && contentLength <= bufferThreshold;
389
+ let body;
390
+ let bodyController;
391
+ let bodyClosed = false;
392
+ let bodyPromise = null;
393
+ let bodyReject = null;
394
+ if (shouldBuffer) {
395
+ // ── Buffer path: small body accumulated natively in C++ ──
396
+ bodyPromise = new Promise((resolve, reject) => {
397
+ bodyReject = reject;
398
+ res.collectBody(bufferThreshold, (fullBody) => {
399
+ bodyReject = null;
400
+ if (fullBody === null) {
401
+ reject(new Error(`Body size exceeded buffer threshold ${bufferThreshold}`));
402
+ }
403
+ else if (fullBody.byteLength === 0) {
404
+ resolve(EMPTY_U8);
405
+ }
406
+ else {
407
+ // Copy - collectBody neutering behavior is undocumented
408
+ resolve(new Uint8Array(fullBody.slice(0)));
409
+ }
410
+ });
411
+ });
412
+ bodyPromise.catch(() => { }); // prevent unhandled rejection if handler never reads body
413
+ }
414
+ else if (hasBody) {
415
+ // ── Stream path: large body, no Content-Length, or native mode ──
416
+ body = new ReadableStream({
417
+ start(controller) {
418
+ bodyController = controller;
419
+ res.onData((chunk, isLast) => {
420
+ if (chunk.byteLength > 0) {
421
+ // Must copy - uWS reuses the underlying ArrayBuffer memory
422
+ controller.enqueue(new Uint8Array(chunk.slice(0)));
423
+ }
424
+ if (isLast) {
425
+ bodyClosed = true;
426
+ controller.close();
427
+ }
428
+ });
429
+ },
430
+ });
431
+ }
432
+ // ── 3. Create request + register onAborted (BEFORE dispatch!) ─
433
+ let request;
434
+ if (native) {
435
+ const url = `http://${host || `${hostname}:${port}`}${path}${query ? '?' + query : ''}`;
436
+ const ac = new AbortController();
437
+ request = new Request(url, {
438
+ method,
439
+ headers: new Headers(headerPairs),
440
+ body,
441
+ signal: ac.signal,
442
+ // @ts-expect-error - duplex required for streaming request bodies in Node
443
+ duplex: hasBody ? 'half' : undefined,
444
+ });
445
+ res.onAborted(() => {
446
+ aborted = true;
447
+ ac.abort(new Error('Client connection closed'));
448
+ if (bodyController && !bodyClosed) {
449
+ try {
450
+ bodyController.error(new Error('Request aborted'));
451
+ }
452
+ catch {
453
+ /* already closed */
454
+ }
455
+ }
456
+ });
457
+ }
458
+ else {
459
+ request = createRequestProxy(method, headerPairs, body, bodyPromise, host, hostname, port, path, query);
460
+ res.onAborted(() => {
461
+ aborted = true;
462
+ request._aborted = true;
463
+ if (request._ac) {
464
+ ;
465
+ request._ac.abort(new Error('Client connection closed'));
466
+ }
467
+ // Buffer path
468
+ if (bodyReject) {
469
+ bodyReject(new Error('Request aborted'));
470
+ bodyReject = null;
471
+ }
472
+ // Stream path
473
+ if (bodyController && !bodyClosed) {
474
+ try {
475
+ bodyController.error(new Error('Request aborted'));
476
+ }
477
+ catch {
478
+ /* already closed */
479
+ }
480
+ }
481
+ });
482
+ }
483
+ // ── 4. Response helpers (close over res, aborted) ────────
484
+ const sendError = (error) => {
485
+ if (aborted)
486
+ return;
487
+ logger.error('Unhandled error', error instanceof Error ? (error.stack ?? error.message) : String(error), 'UwsServer');
488
+ res.cork(() => {
489
+ res.writeStatus('500');
490
+ res.writeHeader('content-type', 'application/json');
491
+ res.end(JSON.stringify({
492
+ statusCode: 500,
493
+ error: 'Internal Server Error',
494
+ message: 'Internal Server Error',
495
+ }));
496
+ });
497
+ };
498
+ const sendResponse = (response) => {
499
+ if (aborted)
500
+ return;
501
+ // Fast path: LightResponse CACHE - zero async, one cork
502
+ // Content-Length is set automatically by uWS res.end(body)
503
+ const cached = response[CACHE];
504
+ if (cached) {
505
+ const [status, body, headers] = cached;
506
+ res.cork(() => {
507
+ res.writeStatus(`${status}`);
508
+ if (headers) {
509
+ if (headers instanceof Headers) {
510
+ headers.forEach((v, k) => res.writeHeader(k, v));
511
+ }
512
+ else {
513
+ for (const k of Object.keys(headers))
514
+ res.writeHeader(k, headers[k]);
515
+ }
516
+ }
517
+ res.end(body ?? '');
518
+ });
519
+ return;
520
+ }
521
+ // No body (e.g. native mode 204)
522
+ if (!response.body) {
523
+ res.cork(() => {
524
+ res.writeStatus(`${response.status}`);
525
+ response.headers.forEach((v, k) => res.writeHeader(k, v));
526
+ res.end();
527
+ });
528
+ return;
529
+ }
530
+ // Streaming fallback (SSE, large files)
531
+ if (aborted)
532
+ return;
533
+ return streamBody(response);
534
+ };
535
+ const streamBody = async (response) => {
536
+ res.cork(() => {
537
+ res.writeStatus(`${response.status}`);
538
+ response.headers.forEach((v, k) => res.writeHeader(k, v));
539
+ });
540
+ const reader = response.body.getReader();
541
+ try {
542
+ while (true) {
543
+ const { done, value } = await reader.read();
544
+ if (done || aborted)
545
+ break;
546
+ res.cork(() => res.write(value));
547
+ }
548
+ }
549
+ catch {
550
+ // Response body stream errored
551
+ }
552
+ finally {
553
+ reader.releaseLock();
554
+ }
555
+ if (!aborted)
556
+ res.cork(() => res.end());
557
+ };
558
+ // ── 5. Dispatch: sync path when possible ────────────────
559
+ try {
560
+ const result = handler(request);
561
+ if (result instanceof Promise) {
562
+ result.then(sendResponse, sendError);
563
+ }
564
+ else {
565
+ const p = sendResponse(result);
566
+ if (p)
567
+ p.catch(sendError);
568
+ }
569
+ }
570
+ catch (error) {
571
+ sendError(error);
572
+ }
573
+ });
574
+ // ── Listen ─────────────────────────────────────────────────
575
+ await new Promise((resolve, reject) => {
576
+ app.listen(port, (token) => {
577
+ if (token) {
578
+ listenSocket = token;
579
+ resolve();
580
+ }
581
+ else {
582
+ reject(new Error(`[uws-server] Failed to listen on port ${port}`));
583
+ }
584
+ });
585
+ });
586
+ return {
587
+ async close() {
588
+ if (!native) {
589
+ Object.defineProperty(globalThis, 'Response', { value: GlobalResponse, configurable: true });
590
+ }
591
+ if (listenSocket) {
592
+ ;
593
+ (uWS.default ?? uWS).us_listen_socket_close(listenSocket);
594
+ listenSocket = null;
595
+ }
596
+ },
597
+ };
598
+ };
599
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "@miiajs/uws-server",
3
+ "version": "0.1.0",
4
+ "author": "Ruslan Matiushev",
5
+ "license": "MIT",
6
+ "description": "uWebSockets.js HTTP adapter for MiiaJS - optimized and native modes.",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/miiajs/miia.git",
10
+ "directory": "packages/uws-server"
11
+ },
12
+ "homepage": "https://github.com/miiajs/miia/tree/main/packages/uws-server#readme",
13
+ "bugs": {
14
+ "url": "https://github.com/miiajs/miia/issues"
15
+ },
16
+ "keywords": [
17
+ "miiajs",
18
+ "miia",
19
+ "uwebsockets",
20
+ "http",
21
+ "server",
22
+ "performance"
23
+ ],
24
+ "publishConfig": {
25
+ "access": "public"
26
+ },
27
+ "type": "module",
28
+ "exports": {
29
+ ".": {
30
+ "types": "./dist/index.d.ts",
31
+ "import": "./dist/index.js"
32
+ }
33
+ },
34
+ "main": "./dist/index.js",
35
+ "types": "./dist/index.d.ts",
36
+ "files": [
37
+ "dist",
38
+ "README.md",
39
+ "LICENSE"
40
+ ],
41
+ "sideEffects": false,
42
+ "engines": {
43
+ "node": ">=22.22.1",
44
+ "bun": ">=1.3.11",
45
+ "deno": ">=2.6.1"
46
+ },
47
+ "dependencies": {
48
+ "uWebSockets.js": "github:uNetworking/uWebSockets.js#v20.64.0"
49
+ },
50
+ "scripts": {
51
+ "build": "tsc --build",
52
+ "clean": "tsc --build --clean"
53
+ }
54
+ }