@whatwg-node/server 0.9.37-alpha-20240717115453-841375873174d7ac5a1bce22dc9ea9c5ee6d9060 → 0.10.0-alpha-20240717144936-662ea5088eb83ec5b55025307193fac81a8ea190
Sign up to get free protection for your applications and to get access to all the features.
- package/cjs/createServerAdapter.js +9 -16
- package/cjs/utils.js +3 -6
- package/esm/createServerAdapter.js +10 -17
- package/esm/utils.js +2 -5
- package/package.json +1 -1
- package/typings/types.d.cts +2 -6
- package/typings/types.d.ts +2 -6
- package/typings/utils.d.cts +1 -2
- package/typings/utils.d.ts +1 -2
@@ -99,30 +99,24 @@ function createServerAdapter(serverAdapterBaseObject, options) {
|
|
99
99
|
return handleEarlyResponse();
|
100
100
|
}
|
101
101
|
: givenHandleRequest;
|
102
|
-
// TODO: Remove this on the next major version
|
103
|
-
function handleNodeRequest(nodeRequest, ...ctx) {
|
104
|
-
const serverContext = ctx.length > 1 ? (0, utils_js_1.completeAssign)(...ctx) : ctx[0] || {};
|
105
|
-
const request = (0, utils_js_1.normalizeNodeRequest)(nodeRequest, fetchAPI.Request);
|
106
|
-
return handleRequest(request, serverContext);
|
107
|
-
}
|
108
102
|
function handleNodeRequestAndResponse(nodeRequest, nodeResponseOrContainer, ...ctx) {
|
109
103
|
const nodeResponse = nodeResponseOrContainer.raw || nodeResponseOrContainer;
|
110
|
-
|
111
|
-
|
104
|
+
const serverContext = ctx.length > 1 ? (0, utils_js_1.completeAssign)(...ctx) : ctx[0] || {};
|
105
|
+
const request = (0, utils_js_1.normalizeNodeRequest)(nodeRequest, nodeResponse, fetchAPI.Request);
|
106
|
+
return handleRequest(request, serverContext);
|
112
107
|
}
|
113
|
-
function requestListener(nodeRequest,
|
108
|
+
function requestListener(nodeRequest, nodeResponse, ...ctx) {
|
114
109
|
const waitUntilPromises = [];
|
115
110
|
const defaultServerContext = {
|
116
111
|
req: nodeRequest,
|
117
|
-
res:
|
112
|
+
res: nodeResponse,
|
118
113
|
waitUntil(cb) {
|
119
114
|
waitUntilPromises.push(cb.catch(err => console.error(err)));
|
120
115
|
},
|
121
116
|
};
|
122
|
-
utils_js_1.nodeRequestResponseMap.set(nodeRequest, serverResponse);
|
123
117
|
let response$;
|
124
118
|
try {
|
125
|
-
response$ =
|
119
|
+
response$ = handleNodeRequestAndResponse(nodeRequest, nodeResponse, defaultServerContext, ...ctx);
|
126
120
|
}
|
127
121
|
catch (err) {
|
128
122
|
response$ = (0, utils_js_1.handleErrorFromRequestHandler)(err, fetchAPI.Response);
|
@@ -130,13 +124,13 @@ function createServerAdapter(serverAdapterBaseObject, options) {
|
|
130
124
|
if ((0, utils_js_1.isPromise)(response$)) {
|
131
125
|
return response$
|
132
126
|
.catch((e) => (0, utils_js_1.handleErrorFromRequestHandler)(e, fetchAPI.Response))
|
133
|
-
.then(response => (0, utils_js_1.sendNodeResponse)(response,
|
127
|
+
.then(response => (0, utils_js_1.sendNodeResponse)(response, nodeResponse, nodeRequest))
|
134
128
|
.catch(err => {
|
135
129
|
console.error(`Unexpected error while handling request: ${err.message || err}`);
|
136
130
|
});
|
137
131
|
}
|
138
132
|
try {
|
139
|
-
return (0, utils_js_1.sendNodeResponse)(response$,
|
133
|
+
return (0, utils_js_1.sendNodeResponse)(response$, nodeResponse, nodeRequest);
|
140
134
|
}
|
141
135
|
catch (err) {
|
142
136
|
console.error(`Unexpected error while handling request: ${err.message || err}`);
|
@@ -271,9 +265,8 @@ function createServerAdapter(serverAdapterBaseObject, options) {
|
|
271
265
|
return fetchFn(input, ...maybeCtx);
|
272
266
|
};
|
273
267
|
const adapterObj = {
|
274
|
-
handleRequest,
|
268
|
+
handleRequest: handleRequestWithWaitUntil,
|
275
269
|
fetch: fetchFn,
|
276
|
-
handleNodeRequest,
|
277
270
|
handleNodeRequestAndResponse,
|
278
271
|
requestListener,
|
279
272
|
handleEvent,
|
package/cjs/utils.js
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.
|
3
|
+
exports.ServerAdapterRequestAbortSignal = void 0;
|
4
4
|
exports.isAsyncIterable = isAsyncIterable;
|
5
5
|
exports.normalizeNodeRequest = normalizeNodeRequest;
|
6
6
|
exports.isReadable = isReadable;
|
@@ -101,8 +101,7 @@ class ServerAdapterRequestAbortSignal extends EventTarget {
|
|
101
101
|
}
|
102
102
|
exports.ServerAdapterRequestAbortSignal = ServerAdapterRequestAbortSignal;
|
103
103
|
let bunNodeCompatModeWarned = false;
|
104
|
-
|
105
|
-
function normalizeNodeRequest(nodeRequest, RequestCtor) {
|
104
|
+
function normalizeNodeRequest(nodeRequest, nodeResponse, RequestCtor) {
|
106
105
|
const rawRequest = nodeRequest.raw || nodeRequest.req || nodeRequest;
|
107
106
|
let fullUrl = buildFullUrl(rawRequest);
|
108
107
|
if (nodeRequest.query) {
|
@@ -113,9 +112,7 @@ function normalizeNodeRequest(nodeRequest, RequestCtor) {
|
|
113
112
|
fullUrl = url.toString();
|
114
113
|
}
|
115
114
|
let signal;
|
116
|
-
|
117
|
-
exports.nodeRequestResponseMap.delete(nodeRequest);
|
118
|
-
if (nodeResponse?.once) {
|
115
|
+
if (nodeResponse.once) {
|
119
116
|
let sendAbortSignal;
|
120
117
|
// If ponyfilled
|
121
118
|
if (RequestCtor !== globalThis.Request) {
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/* eslint-disable @typescript-eslint/ban-types */
|
2
2
|
import * as DefaultFetchAPI from '@whatwg-node/fetch';
|
3
|
-
import { completeAssign, handleAbortSignalAndPromiseResponse, handleErrorFromRequestHandler, isFetchEvent, isNodeRequest, isolateObject, isPromise, isRequestInit, isServerResponse, iterateAsyncVoid,
|
3
|
+
import { completeAssign, handleAbortSignalAndPromiseResponse, handleErrorFromRequestHandler, isFetchEvent, isNodeRequest, isolateObject, isPromise, isRequestInit, isServerResponse, iterateAsyncVoid, normalizeNodeRequest, sendNodeResponse, ServerAdapterRequestAbortSignal, } from './utils.js';
|
4
4
|
import { getRequestFromUWSRequest, isUWSResponse, sendResponseToUwsOpts, } from './uwebsockets.js';
|
5
5
|
async function handleWaitUntils(waitUntilPromises) {
|
6
6
|
await Promise.allSettled(waitUntilPromises);
|
@@ -95,30 +95,24 @@ function createServerAdapter(serverAdapterBaseObject, options) {
|
|
95
95
|
return handleEarlyResponse();
|
96
96
|
}
|
97
97
|
: givenHandleRequest;
|
98
|
-
// TODO: Remove this on the next major version
|
99
|
-
function handleNodeRequest(nodeRequest, ...ctx) {
|
100
|
-
const serverContext = ctx.length > 1 ? completeAssign(...ctx) : ctx[0] || {};
|
101
|
-
const request = normalizeNodeRequest(nodeRequest, fetchAPI.Request);
|
102
|
-
return handleRequest(request, serverContext);
|
103
|
-
}
|
104
98
|
function handleNodeRequestAndResponse(nodeRequest, nodeResponseOrContainer, ...ctx) {
|
105
99
|
const nodeResponse = nodeResponseOrContainer.raw || nodeResponseOrContainer;
|
106
|
-
|
107
|
-
|
100
|
+
const serverContext = ctx.length > 1 ? completeAssign(...ctx) : ctx[0] || {};
|
101
|
+
const request = normalizeNodeRequest(nodeRequest, nodeResponse, fetchAPI.Request);
|
102
|
+
return handleRequest(request, serverContext);
|
108
103
|
}
|
109
|
-
function requestListener(nodeRequest,
|
104
|
+
function requestListener(nodeRequest, nodeResponse, ...ctx) {
|
110
105
|
const waitUntilPromises = [];
|
111
106
|
const defaultServerContext = {
|
112
107
|
req: nodeRequest,
|
113
|
-
res:
|
108
|
+
res: nodeResponse,
|
114
109
|
waitUntil(cb) {
|
115
110
|
waitUntilPromises.push(cb.catch(err => console.error(err)));
|
116
111
|
},
|
117
112
|
};
|
118
|
-
nodeRequestResponseMap.set(nodeRequest, serverResponse);
|
119
113
|
let response$;
|
120
114
|
try {
|
121
|
-
response$ =
|
115
|
+
response$ = handleNodeRequestAndResponse(nodeRequest, nodeResponse, defaultServerContext, ...ctx);
|
122
116
|
}
|
123
117
|
catch (err) {
|
124
118
|
response$ = handleErrorFromRequestHandler(err, fetchAPI.Response);
|
@@ -126,13 +120,13 @@ function createServerAdapter(serverAdapterBaseObject, options) {
|
|
126
120
|
if (isPromise(response$)) {
|
127
121
|
return response$
|
128
122
|
.catch((e) => handleErrorFromRequestHandler(e, fetchAPI.Response))
|
129
|
-
.then(response => sendNodeResponse(response,
|
123
|
+
.then(response => sendNodeResponse(response, nodeResponse, nodeRequest))
|
130
124
|
.catch(err => {
|
131
125
|
console.error(`Unexpected error while handling request: ${err.message || err}`);
|
132
126
|
});
|
133
127
|
}
|
134
128
|
try {
|
135
|
-
return sendNodeResponse(response$,
|
129
|
+
return sendNodeResponse(response$, nodeResponse, nodeRequest);
|
136
130
|
}
|
137
131
|
catch (err) {
|
138
132
|
console.error(`Unexpected error while handling request: ${err.message || err}`);
|
@@ -267,9 +261,8 @@ function createServerAdapter(serverAdapterBaseObject, options) {
|
|
267
261
|
return fetchFn(input, ...maybeCtx);
|
268
262
|
};
|
269
263
|
const adapterObj = {
|
270
|
-
handleRequest,
|
264
|
+
handleRequest: handleRequestWithWaitUntil,
|
271
265
|
fetch: fetchFn,
|
272
|
-
handleNodeRequest,
|
273
266
|
handleNodeRequestAndResponse,
|
274
267
|
requestListener,
|
275
268
|
handleEvent,
|
package/esm/utils.js
CHANGED
@@ -81,8 +81,7 @@ export class ServerAdapterRequestAbortSignal extends EventTarget {
|
|
81
81
|
}
|
82
82
|
}
|
83
83
|
let bunNodeCompatModeWarned = false;
|
84
|
-
export
|
85
|
-
export function normalizeNodeRequest(nodeRequest, RequestCtor) {
|
84
|
+
export function normalizeNodeRequest(nodeRequest, nodeResponse, RequestCtor) {
|
86
85
|
const rawRequest = nodeRequest.raw || nodeRequest.req || nodeRequest;
|
87
86
|
let fullUrl = buildFullUrl(rawRequest);
|
88
87
|
if (nodeRequest.query) {
|
@@ -93,9 +92,7 @@ export function normalizeNodeRequest(nodeRequest, RequestCtor) {
|
|
93
92
|
fullUrl = url.toString();
|
94
93
|
}
|
95
94
|
let signal;
|
96
|
-
|
97
|
-
nodeRequestResponseMap.delete(nodeRequest);
|
98
|
-
if (nodeResponse?.once) {
|
95
|
+
if (nodeResponse.once) {
|
99
96
|
let sendAbortSignal;
|
100
97
|
// If ponyfilled
|
101
98
|
if (RequestCtor !== globalThis.Request) {
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@whatwg-node/server",
|
3
|
-
"version": "0.
|
3
|
+
"version": "0.10.0-alpha-20240717144936-662ea5088eb83ec5b55025307193fac81a8ea190",
|
4
4
|
"description": "Fetch API compliant HTTP Server adapter",
|
5
5
|
"sideEffects": false,
|
6
6
|
"dependencies": {
|
package/typings/types.d.cts
CHANGED
@@ -17,7 +17,7 @@ export interface ServerAdapterObject<TServerContext> extends EventListenerObject
|
|
17
17
|
/**
|
18
18
|
* A basic request listener that takes a `Request` with the server context and returns a `Response`.
|
19
19
|
*/
|
20
|
-
handleRequest: (request: Request, ctx: TServerContext & ServerAdapterInitialContext) => Promise<Response> | Response;
|
20
|
+
handleRequest: (request: Request, ctx: TServerContext & Partial<ServerAdapterInitialContext>) => Promise<Response> | Response;
|
21
21
|
/**
|
22
22
|
* WHATWG Fetch spec compliant `fetch` function that can be used for testing purposes.
|
23
23
|
*/
|
@@ -31,10 +31,6 @@ export interface ServerAdapterObject<TServerContext> extends EventListenerObject
|
|
31
31
|
fetch(url: URL, ...ctx: Partial<TServerContext>[]): Promise<Response> | Response;
|
32
32
|
fetch(url: URL, init: RequestInit, ctx: TServerContext): Promise<Response> | Response;
|
33
33
|
fetch(url: URL, init: RequestInit, ...ctx: Partial<TServerContext>[]): Promise<Response> | Response;
|
34
|
-
/**
|
35
|
-
* This function takes Node's request object and returns a WHATWG Fetch spec compliant `Response` object.
|
36
|
-
**/
|
37
|
-
handleNodeRequest(nodeRequest: NodeRequest, ...ctx: Partial<TServerContext & ServerAdapterInitialContext>[]): Promise<Response> | Response;
|
38
34
|
/**
|
39
35
|
* This function takes Node's request and response objects and returns a WHATWG Fetch spec compliant `Response` object.
|
40
36
|
*/
|
@@ -72,7 +68,7 @@ export type ServerAdapterNodeContext = {
|
|
72
68
|
req: NodeRequest;
|
73
69
|
res: NodeResponse;
|
74
70
|
};
|
75
|
-
export type WaitUntilFn = (promise: Promise<
|
71
|
+
export type WaitUntilFn = (promise: Promise<unknown>) => void;
|
76
72
|
export type FetchAPI = ReturnType<typeof import('@whatwg-node/fetch').createFetch>;
|
77
73
|
export type ServerAdapterInitialContext = {
|
78
74
|
/**
|
package/typings/types.d.ts
CHANGED
@@ -17,7 +17,7 @@ export interface ServerAdapterObject<TServerContext> extends EventListenerObject
|
|
17
17
|
/**
|
18
18
|
* A basic request listener that takes a `Request` with the server context and returns a `Response`.
|
19
19
|
*/
|
20
|
-
handleRequest: (request: Request, ctx: TServerContext & ServerAdapterInitialContext) => Promise<Response> | Response;
|
20
|
+
handleRequest: (request: Request, ctx: TServerContext & Partial<ServerAdapterInitialContext>) => Promise<Response> | Response;
|
21
21
|
/**
|
22
22
|
* WHATWG Fetch spec compliant `fetch` function that can be used for testing purposes.
|
23
23
|
*/
|
@@ -31,10 +31,6 @@ export interface ServerAdapterObject<TServerContext> extends EventListenerObject
|
|
31
31
|
fetch(url: URL, ...ctx: Partial<TServerContext>[]): Promise<Response> | Response;
|
32
32
|
fetch(url: URL, init: RequestInit, ctx: TServerContext): Promise<Response> | Response;
|
33
33
|
fetch(url: URL, init: RequestInit, ...ctx: Partial<TServerContext>[]): Promise<Response> | Response;
|
34
|
-
/**
|
35
|
-
* This function takes Node's request object and returns a WHATWG Fetch spec compliant `Response` object.
|
36
|
-
**/
|
37
|
-
handleNodeRequest(nodeRequest: NodeRequest, ...ctx: Partial<TServerContext & ServerAdapterInitialContext>[]): Promise<Response> | Response;
|
38
34
|
/**
|
39
35
|
* This function takes Node's request and response objects and returns a WHATWG Fetch spec compliant `Response` object.
|
40
36
|
*/
|
@@ -72,7 +68,7 @@ export type ServerAdapterNodeContext = {
|
|
72
68
|
req: NodeRequest;
|
73
69
|
res: NodeResponse;
|
74
70
|
};
|
75
|
-
export type WaitUntilFn = (promise: Promise<
|
71
|
+
export type WaitUntilFn = (promise: Promise<unknown>) => void;
|
76
72
|
export type FetchAPI = ReturnType<typeof import('@whatwg-node/fetch').createFetch>;
|
77
73
|
export type ServerAdapterInitialContext = {
|
78
74
|
/**
|
package/typings/utils.d.cts
CHANGED
@@ -30,8 +30,7 @@ export declare class ServerAdapterRequestAbortSignal extends EventTarget impleme
|
|
30
30
|
set onabort(value: ((this: AbortSignal, ev: Event) => any) | null);
|
31
31
|
any(signals: Iterable<AbortSignal>): AbortSignal;
|
32
32
|
}
|
33
|
-
export declare
|
34
|
-
export declare function normalizeNodeRequest(nodeRequest: NodeRequest, RequestCtor: typeof Request): Request;
|
33
|
+
export declare function normalizeNodeRequest(nodeRequest: NodeRequest, nodeResponse: NodeResponse, RequestCtor: typeof Request): Request;
|
35
34
|
export declare function isReadable(stream: any): stream is Readable;
|
36
35
|
export declare function isNodeRequest(request: any): request is NodeRequest;
|
37
36
|
export declare function isServerResponse(stream: any): stream is NodeResponse;
|
package/typings/utils.d.ts
CHANGED
@@ -30,8 +30,7 @@ export declare class ServerAdapterRequestAbortSignal extends EventTarget impleme
|
|
30
30
|
set onabort(value: ((this: AbortSignal, ev: Event) => any) | null);
|
31
31
|
any(signals: Iterable<AbortSignal>): AbortSignal;
|
32
32
|
}
|
33
|
-
export declare
|
34
|
-
export declare function normalizeNodeRequest(nodeRequest: NodeRequest, RequestCtor: typeof Request): Request;
|
33
|
+
export declare function normalizeNodeRequest(nodeRequest: NodeRequest, nodeResponse: NodeResponse, RequestCtor: typeof Request): Request;
|
35
34
|
export declare function isReadable(stream: any): stream is Readable;
|
36
35
|
export declare function isNodeRequest(request: any): request is NodeRequest;
|
37
36
|
export declare function isServerResponse(stream: any): stream is NodeResponse;
|