@whatwg-node/server 0.9.66-alpha-20250205000734-b48a2e64484147e8ccb74c205803bb5cd4b7e948 → 0.9.66-rc-20250205161008-234502a36574e58cd24a1ee00814dcf6a1b94601
Sign up to get free protection for your applications and to get access to all the features.
- package/cjs/createServerAdapter.js +7 -3
- package/cjs/plugins/useCors.js +0 -1
- package/cjs/utils.js +10 -3
- package/cjs/uwebsockets.js +2 -2
- package/esm/createServerAdapter.js +7 -3
- package/esm/plugins/useCors.js +0 -1
- package/esm/utils.js +10 -3
- package/esm/uwebsockets.js +2 -2
- package/package.json +1 -1
- package/typings/utils.d.cts +1 -1
- package/typings/utils.d.ts +1 -1
@@ -213,7 +213,7 @@ function createServerAdapter(serverAdapterBaseObject, options) {
|
|
213
213
|
controller.abort();
|
214
214
|
});
|
215
215
|
res.onAborted = function (cb) {
|
216
|
-
controller.signal.addEventListener('abort', cb);
|
216
|
+
controller.signal.addEventListener('abort', cb, { once: true });
|
217
217
|
};
|
218
218
|
const request = (0, uwebsockets_js_1.getRequestFromUWSRequest)({
|
219
219
|
req,
|
@@ -275,13 +275,17 @@ function createServerAdapter(serverAdapterBaseObject, options) {
|
|
275
275
|
if ((0, utils_js_1.isRequestInit)(initOrCtx)) {
|
276
276
|
const request = new fetchAPI.Request(input, initOrCtx);
|
277
277
|
const res$ = handleRequestWithWaitUntil(request, ...restOfCtx);
|
278
|
-
|
278
|
+
const signal = initOrCtx.signal;
|
279
|
+
if (signal) {
|
280
|
+
return (0, utils_js_1.handleAbortSignalAndPromiseResponse)(res$, signal);
|
281
|
+
}
|
282
|
+
return res$;
|
279
283
|
}
|
280
284
|
const request = new fetchAPI.Request(input);
|
281
285
|
return handleRequestWithWaitUntil(request, ...maybeCtx);
|
282
286
|
}
|
283
287
|
const res$ = handleRequestWithWaitUntil(input, ...maybeCtx);
|
284
|
-
return (0, utils_js_1.handleAbortSignalAndPromiseResponse)(res$, input.
|
288
|
+
return (0, utils_js_1.handleAbortSignalAndPromiseResponse)(res$, input.signal);
|
285
289
|
};
|
286
290
|
const genericRequestHandler = (input, ...maybeCtx) => {
|
287
291
|
// If it is a Node request
|
package/cjs/plugins/useCors.js
CHANGED
@@ -112,7 +112,6 @@ function useCORS(options) {
|
|
112
112
|
}
|
113
113
|
},
|
114
114
|
async onResponse({ request, serverContext, response }) {
|
115
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
116
115
|
const headers = await getCORSResponseHeaders(request, corsOptionsFactory, serverContext);
|
117
116
|
if (headers != null) {
|
118
117
|
for (const headerName in headers) {
|
package/cjs/utils.js
CHANGED
@@ -97,7 +97,7 @@ function normalizeNodeRequest(nodeRequest, fetchAPI) {
|
|
97
97
|
const closeEventListener = () => {
|
98
98
|
if (!controller.signal.aborted) {
|
99
99
|
Object.defineProperty(rawRequest, 'aborted', { value: true });
|
100
|
-
controller.abort();
|
100
|
+
controller.abort(nodeResponse.errored ?? undefined);
|
101
101
|
}
|
102
102
|
};
|
103
103
|
nodeResponse.once('error', closeEventListener);
|
@@ -443,17 +443,24 @@ function createDeferredPromise() {
|
|
443
443
|
};
|
444
444
|
}
|
445
445
|
function handleAbortSignalAndPromiseResponse(response$, abortSignal) {
|
446
|
+
if (abortSignal?.aborted) {
|
447
|
+
throw abortSignal.reason;
|
448
|
+
}
|
446
449
|
if (isPromise(response$) && abortSignal) {
|
447
450
|
const deferred$ = createDeferredPromise();
|
448
|
-
|
451
|
+
function abortSignalFetchErrorHandler() {
|
449
452
|
deferred$.reject(abortSignal.reason);
|
450
|
-
}
|
453
|
+
}
|
454
|
+
abortSignal.addEventListener('abort', abortSignalFetchErrorHandler, { once: true });
|
451
455
|
response$
|
452
456
|
.then(function fetchSuccessHandler(res) {
|
453
457
|
deferred$.resolve(res);
|
454
458
|
})
|
455
459
|
.catch(function fetchErrorHandler(err) {
|
456
460
|
deferred$.reject(err);
|
461
|
+
})
|
462
|
+
.finally(() => {
|
463
|
+
abortSignal.removeEventListener('abort', abortSignalFetchErrorHandler);
|
457
464
|
});
|
458
465
|
return deferred$.promise;
|
459
466
|
}
|
package/cjs/uwebsockets.js
CHANGED
@@ -45,7 +45,7 @@ function getRequestFromUWSRequest({ req, res, fetchAPI, controller, }) {
|
|
45
45
|
duplex = 'half';
|
46
46
|
controller.signal.addEventListener('abort', () => {
|
47
47
|
stop();
|
48
|
-
});
|
48
|
+
}, { once: true });
|
49
49
|
let readableStream;
|
50
50
|
getReadableStream = () => {
|
51
51
|
if (!readableStream) {
|
@@ -212,7 +212,7 @@ function sendResponseToUwsOpts(uwsResponse, fetchResponse, controller, fetchAPI)
|
|
212
212
|
if (!fetchResponse.body?.locked) {
|
213
213
|
fetchResponse.body?.cancel(controller.signal.reason);
|
214
214
|
}
|
215
|
-
});
|
215
|
+
}, { once: true });
|
216
216
|
return fetchResponse.body
|
217
217
|
.pipeTo(createWritableFromUWS(uwsResponse, fetchAPI), {
|
218
218
|
signal: controller.signal,
|
@@ -209,7 +209,7 @@ function createServerAdapter(serverAdapterBaseObject, options) {
|
|
209
209
|
controller.abort();
|
210
210
|
});
|
211
211
|
res.onAborted = function (cb) {
|
212
|
-
controller.signal.addEventListener('abort', cb);
|
212
|
+
controller.signal.addEventListener('abort', cb, { once: true });
|
213
213
|
};
|
214
214
|
const request = getRequestFromUWSRequest({
|
215
215
|
req,
|
@@ -271,13 +271,17 @@ function createServerAdapter(serverAdapterBaseObject, options) {
|
|
271
271
|
if (isRequestInit(initOrCtx)) {
|
272
272
|
const request = new fetchAPI.Request(input, initOrCtx);
|
273
273
|
const res$ = handleRequestWithWaitUntil(request, ...restOfCtx);
|
274
|
-
|
274
|
+
const signal = initOrCtx.signal;
|
275
|
+
if (signal) {
|
276
|
+
return handleAbortSignalAndPromiseResponse(res$, signal);
|
277
|
+
}
|
278
|
+
return res$;
|
275
279
|
}
|
276
280
|
const request = new fetchAPI.Request(input);
|
277
281
|
return handleRequestWithWaitUntil(request, ...maybeCtx);
|
278
282
|
}
|
279
283
|
const res$ = handleRequestWithWaitUntil(input, ...maybeCtx);
|
280
|
-
return handleAbortSignalAndPromiseResponse(res$, input.
|
284
|
+
return handleAbortSignalAndPromiseResponse(res$, input.signal);
|
281
285
|
};
|
282
286
|
const genericRequestHandler = (input, ...maybeCtx) => {
|
283
287
|
// If it is a Node request
|
package/esm/plugins/useCors.js
CHANGED
@@ -108,7 +108,6 @@ export function useCORS(options) {
|
|
108
108
|
}
|
109
109
|
},
|
110
110
|
async onResponse({ request, serverContext, response }) {
|
111
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
112
111
|
const headers = await getCORSResponseHeaders(request, corsOptionsFactory, serverContext);
|
113
112
|
if (headers != null) {
|
114
113
|
for (const headerName in headers) {
|
package/esm/utils.js
CHANGED
@@ -75,7 +75,7 @@ export function normalizeNodeRequest(nodeRequest, fetchAPI) {
|
|
75
75
|
const closeEventListener = () => {
|
76
76
|
if (!controller.signal.aborted) {
|
77
77
|
Object.defineProperty(rawRequest, 'aborted', { value: true });
|
78
|
-
controller.abort();
|
78
|
+
controller.abort(nodeResponse.errored ?? undefined);
|
79
79
|
}
|
80
80
|
};
|
81
81
|
nodeResponse.once('error', closeEventListener);
|
@@ -421,17 +421,24 @@ export function createDeferredPromise() {
|
|
421
421
|
};
|
422
422
|
}
|
423
423
|
export function handleAbortSignalAndPromiseResponse(response$, abortSignal) {
|
424
|
+
if (abortSignal?.aborted) {
|
425
|
+
throw abortSignal.reason;
|
426
|
+
}
|
424
427
|
if (isPromise(response$) && abortSignal) {
|
425
428
|
const deferred$ = createDeferredPromise();
|
426
|
-
|
429
|
+
function abortSignalFetchErrorHandler() {
|
427
430
|
deferred$.reject(abortSignal.reason);
|
428
|
-
}
|
431
|
+
}
|
432
|
+
abortSignal.addEventListener('abort', abortSignalFetchErrorHandler, { once: true });
|
429
433
|
response$
|
430
434
|
.then(function fetchSuccessHandler(res) {
|
431
435
|
deferred$.resolve(res);
|
432
436
|
})
|
433
437
|
.catch(function fetchErrorHandler(err) {
|
434
438
|
deferred$.reject(err);
|
439
|
+
})
|
440
|
+
.finally(() => {
|
441
|
+
abortSignal.removeEventListener('abort', abortSignalFetchErrorHandler);
|
435
442
|
});
|
436
443
|
return deferred$.promise;
|
437
444
|
}
|
package/esm/uwebsockets.js
CHANGED
@@ -38,7 +38,7 @@ export function getRequestFromUWSRequest({ req, res, fetchAPI, controller, }) {
|
|
38
38
|
duplex = 'half';
|
39
39
|
controller.signal.addEventListener('abort', () => {
|
40
40
|
stop();
|
41
|
-
});
|
41
|
+
}, { once: true });
|
42
42
|
let readableStream;
|
43
43
|
getReadableStream = () => {
|
44
44
|
if (!readableStream) {
|
@@ -205,7 +205,7 @@ export function sendResponseToUwsOpts(uwsResponse, fetchResponse, controller, fe
|
|
205
205
|
if (!fetchResponse.body?.locked) {
|
206
206
|
fetchResponse.body?.cancel(controller.signal.reason);
|
207
207
|
}
|
208
|
-
});
|
208
|
+
}, { once: true });
|
209
209
|
return fetchResponse.body
|
210
210
|
.pipeTo(createWritableFromUWS(uwsResponse, fetchAPI), {
|
211
211
|
signal: controller.signal,
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@whatwg-node/server",
|
3
|
-
"version": "0.9.66-
|
3
|
+
"version": "0.9.66-rc-20250205161008-234502a36574e58cd24a1ee00814dcf6a1b94601",
|
4
4
|
"description": "Fetch API compliant HTTP Server adapter",
|
5
5
|
"sideEffects": false,
|
6
6
|
"dependencies": {
|
package/typings/utils.d.cts
CHANGED
@@ -40,7 +40,7 @@ export interface DeferredPromise<T = void> {
|
|
40
40
|
reject: (reason: any) => void;
|
41
41
|
}
|
42
42
|
export declare function createDeferredPromise<T = void>(): DeferredPromise<T>;
|
43
|
-
export declare function handleAbortSignalAndPromiseResponse(response$: Promise<Response> | Response, abortSignal
|
43
|
+
export declare function handleAbortSignalAndPromiseResponse(response$: Promise<Response> | Response, abortSignal: AbortSignal): Response | Promise<Response>;
|
44
44
|
export declare const decompressedResponseMap: WeakMap<Response, Response>;
|
45
45
|
export declare function getSupportedEncodings(fetchAPI: FetchAPI): CompressionFormat[];
|
46
46
|
export declare function handleResponseDecompression(response: Response, fetchAPI: FetchAPI): Response;
|
package/typings/utils.d.ts
CHANGED
@@ -40,7 +40,7 @@ export interface DeferredPromise<T = void> {
|
|
40
40
|
reject: (reason: any) => void;
|
41
41
|
}
|
42
42
|
export declare function createDeferredPromise<T = void>(): DeferredPromise<T>;
|
43
|
-
export declare function handleAbortSignalAndPromiseResponse(response$: Promise<Response> | Response, abortSignal
|
43
|
+
export declare function handleAbortSignalAndPromiseResponse(response$: Promise<Response> | Response, abortSignal: AbortSignal): Response | Promise<Response>;
|
44
44
|
export declare const decompressedResponseMap: WeakMap<Response, Response>;
|
45
45
|
export declare function getSupportedEncodings(fetchAPI: FetchAPI): CompressionFormat[];
|
46
46
|
export declare function handleResponseDecompression(response: Response, fetchAPI: FetchAPI): Response;
|