@whatwg-node/server 0.9.8 → 0.9.9-rc-20230807163010-70e3d38
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/cjs/createServerAdapter.js +79 -83
- package/cjs/utils.js +8 -0
- package/cjs/uwebsockets.js +26 -21
- package/esm/createServerAdapter.js +79 -83
- package/esm/utils.js +8 -0
- package/esm/uwebsockets.js +26 -21
- package/package.json +1 -1
- package/typings/uwebsockets.d.cts +1 -5
- package/typings/uwebsockets.d.ts +1 -5
|
@@ -51,58 +51,66 @@ function createServerAdapter(serverAdapterBaseObject, options) {
|
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
requestHandler,
|
|
69
|
-
setRequestHandler(newRequestHandler) {
|
|
70
|
-
requestHandler = newRequestHandler;
|
|
71
|
-
},
|
|
72
|
-
endResponse(newResponse) {
|
|
73
|
-
response = newResponse;
|
|
74
|
-
if (newResponse) {
|
|
75
|
-
stopEarly();
|
|
76
|
-
}
|
|
77
|
-
},
|
|
78
|
-
}));
|
|
79
|
-
function handleResponse(response) {
|
|
80
|
-
const onResponseHookPayload = {
|
|
54
|
+
const handleRequest = onRequestHooks.length > 0 || onResponseHooks.length > 0
|
|
55
|
+
? function handleRequest(request, serverContext) {
|
|
56
|
+
let requestHandler = givenHandleRequest;
|
|
57
|
+
let response;
|
|
58
|
+
if (onRequestHooks.length === 0) {
|
|
59
|
+
return handleEarlyResponse();
|
|
60
|
+
}
|
|
61
|
+
let url = new Proxy(EMPTY_OBJECT, {
|
|
62
|
+
get(_target, prop, _receiver) {
|
|
63
|
+
url = new fetchAPI.URL(request.url, 'http://localhost');
|
|
64
|
+
return Reflect.get(url, prop, url);
|
|
65
|
+
},
|
|
66
|
+
});
|
|
67
|
+
const onRequestHooksIteration$ = (0, utils_js_1.iterateAsyncVoid)(onRequestHooks, (onRequestHook, stopEarly) => onRequestHook({
|
|
81
68
|
request,
|
|
82
|
-
response,
|
|
83
69
|
serverContext,
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
70
|
+
fetchAPI,
|
|
71
|
+
url,
|
|
72
|
+
requestHandler,
|
|
73
|
+
setRequestHandler(newRequestHandler) {
|
|
74
|
+
requestHandler = newRequestHandler;
|
|
75
|
+
},
|
|
76
|
+
endResponse(newResponse) {
|
|
77
|
+
response = newResponse;
|
|
78
|
+
if (newResponse) {
|
|
79
|
+
stopEarly();
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
}));
|
|
83
|
+
function handleResponse(response) {
|
|
84
|
+
if (onRequestHooks.length === 0) {
|
|
85
|
+
return response;
|
|
86
|
+
}
|
|
87
|
+
const onResponseHookPayload = {
|
|
88
|
+
request,
|
|
89
|
+
response,
|
|
90
|
+
serverContext,
|
|
91
|
+
};
|
|
92
|
+
const onResponseHooksIteration$ = (0, utils_js_1.iterateAsyncVoid)(onResponseHooks, onResponseHook => onResponseHook(onResponseHookPayload));
|
|
93
|
+
if ((0, utils_js_1.isPromise)(onResponseHooksIteration$)) {
|
|
94
|
+
return onResponseHooksIteration$.then(() => response);
|
|
95
|
+
}
|
|
96
|
+
return response;
|
|
88
97
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
return response
|
|
98
|
+
function handleEarlyResponse() {
|
|
99
|
+
if (!response) {
|
|
100
|
+
const response$ = requestHandler(request, serverContext);
|
|
101
|
+
if ((0, utils_js_1.isPromise)(response$)) {
|
|
102
|
+
return response$.then(handleResponse);
|
|
103
|
+
}
|
|
104
|
+
return handleResponse(response$);
|
|
96
105
|
}
|
|
97
|
-
return handleResponse(response
|
|
106
|
+
return handleResponse(response);
|
|
98
107
|
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
return
|
|
108
|
+
if ((0, utils_js_1.isPromise)(onRequestHooksIteration$)) {
|
|
109
|
+
return onRequestHooksIteration$.then(handleEarlyResponse);
|
|
110
|
+
}
|
|
111
|
+
return handleEarlyResponse();
|
|
103
112
|
}
|
|
104
|
-
|
|
105
|
-
}
|
|
113
|
+
: givenHandleRequest;
|
|
106
114
|
function handleNodeRequest(nodeRequest, ...ctx) {
|
|
107
115
|
const serverContext = ctx.length > 1 ? (0, utils_js_1.completeAssign)(...ctx) : ctx[0] || {};
|
|
108
116
|
const request = (0, utils_js_1.normalizeNodeRequest)(nodeRequest, fetchAPI.Request);
|
|
@@ -116,25 +124,19 @@ function createServerAdapter(serverAdapterBaseObject, options) {
|
|
|
116
124
|
};
|
|
117
125
|
addWaitUntil(defaultServerContext, waitUntilPromises);
|
|
118
126
|
const response$ = handleNodeRequest(nodeRequest, defaultServerContext, ...ctx);
|
|
119
|
-
function handleFetchResponse(response) {
|
|
120
|
-
try {
|
|
121
|
-
if (serverResponse.closed || serverResponse.destroyed) {
|
|
122
|
-
return;
|
|
123
|
-
}
|
|
124
|
-
if (response) {
|
|
125
|
-
return (0, utils_js_1.sendNodeResponse)(response, serverResponse, nodeRequest);
|
|
126
|
-
}
|
|
127
|
-
serverResponse.statusCode = 404;
|
|
128
|
-
serverResponse.end();
|
|
129
|
-
}
|
|
130
|
-
catch (e) {
|
|
131
|
-
console.error(`Unexpected error: ${e.message || e}`);
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
127
|
if ((0, utils_js_1.isPromise)(response$)) {
|
|
135
|
-
return response
|
|
128
|
+
return response$
|
|
129
|
+
.then(response => (0, utils_js_1.sendNodeResponse)(response, serverResponse, nodeRequest))
|
|
130
|
+
.catch(err => {
|
|
131
|
+
console.error(`Unexpected error while handling request: ${err.message || err}`);
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
try {
|
|
135
|
+
return (0, utils_js_1.sendNodeResponse)(response$, serverResponse, nodeRequest);
|
|
136
|
+
}
|
|
137
|
+
catch (err) {
|
|
138
|
+
console.error(`Unexpected error while handling request: ${err.message || err}`);
|
|
136
139
|
}
|
|
137
|
-
return handleFetchResponse(response$);
|
|
138
140
|
}
|
|
139
141
|
function handleUWS(res, req, ...ctx) {
|
|
140
142
|
const waitUntilPromises = [];
|
|
@@ -154,29 +156,23 @@ function createServerAdapter(serverAdapterBaseObject, options) {
|
|
|
154
156
|
resAborted = true;
|
|
155
157
|
});
|
|
156
158
|
const response$ = handleRequest(request, serverContext);
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
if (!response) {
|
|
163
|
-
res.writeStatus('404 Not Found');
|
|
164
|
-
res.end();
|
|
165
|
-
return;
|
|
159
|
+
if ((0, utils_js_1.isPromise)(response$)) {
|
|
160
|
+
return response$
|
|
161
|
+
.then(response => {
|
|
162
|
+
if (!resAborted) {
|
|
163
|
+
return (0, uwebsockets_js_1.sendResponseToUwsOpts)(res, response);
|
|
166
164
|
}
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
}
|
|
172
|
-
catch (e) {
|
|
173
|
-
console.error(`Unexpected error: ${e.message || e}`);
|
|
174
|
-
}
|
|
165
|
+
})
|
|
166
|
+
.catch(err => {
|
|
167
|
+
console.error(`Unexpected error while handling request: ${err.message || err}`);
|
|
168
|
+
});
|
|
175
169
|
}
|
|
176
|
-
|
|
177
|
-
return
|
|
170
|
+
try {
|
|
171
|
+
return (0, uwebsockets_js_1.sendResponseToUwsOpts)(res, response$);
|
|
172
|
+
}
|
|
173
|
+
catch (err) {
|
|
174
|
+
console.error(`Unexpected error while handling request: ${err.message || err}`);
|
|
178
175
|
}
|
|
179
|
-
return handleFetchResponse(response$);
|
|
180
176
|
}
|
|
181
177
|
function handleEvent(event, ...ctx) {
|
|
182
178
|
if (!event.respondWith || !event.request) {
|
package/cjs/utils.js
CHANGED
|
@@ -156,6 +156,14 @@ async function sendAsyncIterable(serverResponse, asyncIterable) {
|
|
|
156
156
|
endResponse(serverResponse);
|
|
157
157
|
}
|
|
158
158
|
function sendNodeResponse(fetchResponse, serverResponse, nodeRequest) {
|
|
159
|
+
if (serverResponse.closed || serverResponse.destroyed) {
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
if (!fetchResponse) {
|
|
163
|
+
serverResponse.statusCode = 404;
|
|
164
|
+
serverResponse.end();
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
159
167
|
serverResponse.statusCode = fetchResponse.status;
|
|
160
168
|
serverResponse.statusMessage = fetchResponse.statusText;
|
|
161
169
|
fetchResponse.headers.forEach((value, key) => {
|
package/cjs/uwebsockets.js
CHANGED
|
@@ -70,55 +70,60 @@ function getRequestFromUWSRequest({ req, res, fetchAPI }) {
|
|
|
70
70
|
});
|
|
71
71
|
}
|
|
72
72
|
exports.getRequestFromUWSRequest = getRequestFromUWSRequest;
|
|
73
|
-
async function forwardResponseBodyToUWSResponse(
|
|
73
|
+
async function forwardResponseBodyToUWSResponse(uwsResponse, fetchResponse) {
|
|
74
74
|
let resAborted = false;
|
|
75
|
-
|
|
75
|
+
uwsResponse.onAborted(function () {
|
|
76
76
|
resAborted = true;
|
|
77
77
|
});
|
|
78
|
-
for await (const chunk of
|
|
78
|
+
for await (const chunk of fetchResponse.body) {
|
|
79
79
|
if (resAborted) {
|
|
80
80
|
return;
|
|
81
81
|
}
|
|
82
|
-
|
|
83
|
-
|
|
82
|
+
uwsResponse.cork(() => {
|
|
83
|
+
uwsResponse.write(chunk);
|
|
84
84
|
});
|
|
85
85
|
}
|
|
86
|
-
|
|
87
|
-
|
|
86
|
+
uwsResponse.cork(() => {
|
|
87
|
+
uwsResponse.end();
|
|
88
88
|
});
|
|
89
89
|
}
|
|
90
|
-
function sendResponseToUwsOpts(
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
90
|
+
function sendResponseToUwsOpts(uwsResponse, fetchResponse) {
|
|
91
|
+
if (!fetchResponse) {
|
|
92
|
+
uwsResponse.writeStatus('404 Not Found');
|
|
93
|
+
uwsResponse.end();
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
const isStringOrBuffer = fetchResponse.bodyType === 'Buffer' ||
|
|
97
|
+
fetchResponse.bodyType === 'String' ||
|
|
98
|
+
fetchResponse.bodyType === 'Uint8Array';
|
|
99
|
+
uwsResponse.cork(() => {
|
|
100
|
+
uwsResponse.writeStatus(`${fetchResponse.status} ${fetchResponse.statusText}`);
|
|
101
|
+
for (const [key, value] of fetchResponse.headers) {
|
|
97
102
|
// content-length causes an error with Node.js's fetch
|
|
98
103
|
if (key !== 'content-length') {
|
|
99
104
|
if (key === 'set-cookie') {
|
|
100
|
-
const setCookies =
|
|
105
|
+
const setCookies = fetchResponse.headers.getSetCookie?.();
|
|
101
106
|
if (setCookies) {
|
|
102
107
|
for (const setCookie of setCookies) {
|
|
103
|
-
|
|
108
|
+
uwsResponse.writeHeader(key, setCookie);
|
|
104
109
|
}
|
|
105
110
|
continue;
|
|
106
111
|
}
|
|
107
112
|
}
|
|
108
|
-
|
|
113
|
+
uwsResponse.writeHeader(key, value);
|
|
109
114
|
}
|
|
110
115
|
}
|
|
111
116
|
if (isStringOrBuffer) {
|
|
112
|
-
|
|
117
|
+
uwsResponse.end(fetchResponse.bodyInit);
|
|
113
118
|
}
|
|
114
119
|
});
|
|
115
120
|
if (isStringOrBuffer) {
|
|
116
121
|
return;
|
|
117
122
|
}
|
|
118
|
-
if (!
|
|
119
|
-
|
|
123
|
+
if (!fetchResponse.body) {
|
|
124
|
+
uwsResponse.end();
|
|
120
125
|
return;
|
|
121
126
|
}
|
|
122
|
-
return forwardResponseBodyToUWSResponse(
|
|
127
|
+
return forwardResponseBodyToUWSResponse(uwsResponse, fetchResponse);
|
|
123
128
|
}
|
|
124
129
|
exports.sendResponseToUwsOpts = sendResponseToUwsOpts;
|
|
@@ -47,58 +47,66 @@ function createServerAdapter(serverAdapterBaseObject, options) {
|
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
requestHandler,
|
|
65
|
-
setRequestHandler(newRequestHandler) {
|
|
66
|
-
requestHandler = newRequestHandler;
|
|
67
|
-
},
|
|
68
|
-
endResponse(newResponse) {
|
|
69
|
-
response = newResponse;
|
|
70
|
-
if (newResponse) {
|
|
71
|
-
stopEarly();
|
|
72
|
-
}
|
|
73
|
-
},
|
|
74
|
-
}));
|
|
75
|
-
function handleResponse(response) {
|
|
76
|
-
const onResponseHookPayload = {
|
|
50
|
+
const handleRequest = onRequestHooks.length > 0 || onResponseHooks.length > 0
|
|
51
|
+
? function handleRequest(request, serverContext) {
|
|
52
|
+
let requestHandler = givenHandleRequest;
|
|
53
|
+
let response;
|
|
54
|
+
if (onRequestHooks.length === 0) {
|
|
55
|
+
return handleEarlyResponse();
|
|
56
|
+
}
|
|
57
|
+
let url = new Proxy(EMPTY_OBJECT, {
|
|
58
|
+
get(_target, prop, _receiver) {
|
|
59
|
+
url = new fetchAPI.URL(request.url, 'http://localhost');
|
|
60
|
+
return Reflect.get(url, prop, url);
|
|
61
|
+
},
|
|
62
|
+
});
|
|
63
|
+
const onRequestHooksIteration$ = iterateAsyncVoid(onRequestHooks, (onRequestHook, stopEarly) => onRequestHook({
|
|
77
64
|
request,
|
|
78
|
-
response,
|
|
79
65
|
serverContext,
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
66
|
+
fetchAPI,
|
|
67
|
+
url,
|
|
68
|
+
requestHandler,
|
|
69
|
+
setRequestHandler(newRequestHandler) {
|
|
70
|
+
requestHandler = newRequestHandler;
|
|
71
|
+
},
|
|
72
|
+
endResponse(newResponse) {
|
|
73
|
+
response = newResponse;
|
|
74
|
+
if (newResponse) {
|
|
75
|
+
stopEarly();
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
}));
|
|
79
|
+
function handleResponse(response) {
|
|
80
|
+
if (onRequestHooks.length === 0) {
|
|
81
|
+
return response;
|
|
82
|
+
}
|
|
83
|
+
const onResponseHookPayload = {
|
|
84
|
+
request,
|
|
85
|
+
response,
|
|
86
|
+
serverContext,
|
|
87
|
+
};
|
|
88
|
+
const onResponseHooksIteration$ = iterateAsyncVoid(onResponseHooks, onResponseHook => onResponseHook(onResponseHookPayload));
|
|
89
|
+
if (isPromise(onResponseHooksIteration$)) {
|
|
90
|
+
return onResponseHooksIteration$.then(() => response);
|
|
91
|
+
}
|
|
92
|
+
return response;
|
|
84
93
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
return response
|
|
94
|
+
function handleEarlyResponse() {
|
|
95
|
+
if (!response) {
|
|
96
|
+
const response$ = requestHandler(request, serverContext);
|
|
97
|
+
if (isPromise(response$)) {
|
|
98
|
+
return response$.then(handleResponse);
|
|
99
|
+
}
|
|
100
|
+
return handleResponse(response$);
|
|
92
101
|
}
|
|
93
|
-
return handleResponse(response
|
|
102
|
+
return handleResponse(response);
|
|
94
103
|
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
return
|
|
104
|
+
if (isPromise(onRequestHooksIteration$)) {
|
|
105
|
+
return onRequestHooksIteration$.then(handleEarlyResponse);
|
|
106
|
+
}
|
|
107
|
+
return handleEarlyResponse();
|
|
99
108
|
}
|
|
100
|
-
|
|
101
|
-
}
|
|
109
|
+
: givenHandleRequest;
|
|
102
110
|
function handleNodeRequest(nodeRequest, ...ctx) {
|
|
103
111
|
const serverContext = ctx.length > 1 ? completeAssign(...ctx) : ctx[0] || {};
|
|
104
112
|
const request = normalizeNodeRequest(nodeRequest, fetchAPI.Request);
|
|
@@ -112,25 +120,19 @@ function createServerAdapter(serverAdapterBaseObject, options) {
|
|
|
112
120
|
};
|
|
113
121
|
addWaitUntil(defaultServerContext, waitUntilPromises);
|
|
114
122
|
const response$ = handleNodeRequest(nodeRequest, defaultServerContext, ...ctx);
|
|
115
|
-
function handleFetchResponse(response) {
|
|
116
|
-
try {
|
|
117
|
-
if (serverResponse.closed || serverResponse.destroyed) {
|
|
118
|
-
return;
|
|
119
|
-
}
|
|
120
|
-
if (response) {
|
|
121
|
-
return sendNodeResponse(response, serverResponse, nodeRequest);
|
|
122
|
-
}
|
|
123
|
-
serverResponse.statusCode = 404;
|
|
124
|
-
serverResponse.end();
|
|
125
|
-
}
|
|
126
|
-
catch (e) {
|
|
127
|
-
console.error(`Unexpected error: ${e.message || e}`);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
123
|
if (isPromise(response$)) {
|
|
131
|
-
return response
|
|
124
|
+
return response$
|
|
125
|
+
.then(response => sendNodeResponse(response, serverResponse, nodeRequest))
|
|
126
|
+
.catch(err => {
|
|
127
|
+
console.error(`Unexpected error while handling request: ${err.message || err}`);
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
try {
|
|
131
|
+
return sendNodeResponse(response$, serverResponse, nodeRequest);
|
|
132
|
+
}
|
|
133
|
+
catch (err) {
|
|
134
|
+
console.error(`Unexpected error while handling request: ${err.message || err}`);
|
|
132
135
|
}
|
|
133
|
-
return handleFetchResponse(response$);
|
|
134
136
|
}
|
|
135
137
|
function handleUWS(res, req, ...ctx) {
|
|
136
138
|
const waitUntilPromises = [];
|
|
@@ -150,29 +152,23 @@ function createServerAdapter(serverAdapterBaseObject, options) {
|
|
|
150
152
|
resAborted = true;
|
|
151
153
|
});
|
|
152
154
|
const response$ = handleRequest(request, serverContext);
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
if (!response) {
|
|
159
|
-
res.writeStatus('404 Not Found');
|
|
160
|
-
res.end();
|
|
161
|
-
return;
|
|
155
|
+
if (isPromise(response$)) {
|
|
156
|
+
return response$
|
|
157
|
+
.then(response => {
|
|
158
|
+
if (!resAborted) {
|
|
159
|
+
return sendResponseToUwsOpts(res, response);
|
|
162
160
|
}
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
}
|
|
168
|
-
catch (e) {
|
|
169
|
-
console.error(`Unexpected error: ${e.message || e}`);
|
|
170
|
-
}
|
|
161
|
+
})
|
|
162
|
+
.catch(err => {
|
|
163
|
+
console.error(`Unexpected error while handling request: ${err.message || err}`);
|
|
164
|
+
});
|
|
171
165
|
}
|
|
172
|
-
|
|
173
|
-
return response
|
|
166
|
+
try {
|
|
167
|
+
return sendResponseToUwsOpts(res, response$);
|
|
168
|
+
}
|
|
169
|
+
catch (err) {
|
|
170
|
+
console.error(`Unexpected error while handling request: ${err.message || err}`);
|
|
174
171
|
}
|
|
175
|
-
return handleFetchResponse(response$);
|
|
176
172
|
}
|
|
177
173
|
function handleEvent(event, ...ctx) {
|
|
178
174
|
if (!event.respondWith || !event.request) {
|
package/esm/utils.js
CHANGED
|
@@ -146,6 +146,14 @@ async function sendAsyncIterable(serverResponse, asyncIterable) {
|
|
|
146
146
|
endResponse(serverResponse);
|
|
147
147
|
}
|
|
148
148
|
export function sendNodeResponse(fetchResponse, serverResponse, nodeRequest) {
|
|
149
|
+
if (serverResponse.closed || serverResponse.destroyed) {
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
if (!fetchResponse) {
|
|
153
|
+
serverResponse.statusCode = 404;
|
|
154
|
+
serverResponse.end();
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
149
157
|
serverResponse.statusCode = fetchResponse.status;
|
|
150
158
|
serverResponse.statusMessage = fetchResponse.statusText;
|
|
151
159
|
fetchResponse.headers.forEach((value, key) => {
|
package/esm/uwebsockets.js
CHANGED
|
@@ -65,54 +65,59 @@ export function getRequestFromUWSRequest({ req, res, fetchAPI }) {
|
|
|
65
65
|
signal: new UWSAbortSignal(res),
|
|
66
66
|
});
|
|
67
67
|
}
|
|
68
|
-
async function forwardResponseBodyToUWSResponse(
|
|
68
|
+
async function forwardResponseBodyToUWSResponse(uwsResponse, fetchResponse) {
|
|
69
69
|
let resAborted = false;
|
|
70
|
-
|
|
70
|
+
uwsResponse.onAborted(function () {
|
|
71
71
|
resAborted = true;
|
|
72
72
|
});
|
|
73
|
-
for await (const chunk of
|
|
73
|
+
for await (const chunk of fetchResponse.body) {
|
|
74
74
|
if (resAborted) {
|
|
75
75
|
return;
|
|
76
76
|
}
|
|
77
|
-
|
|
78
|
-
|
|
77
|
+
uwsResponse.cork(() => {
|
|
78
|
+
uwsResponse.write(chunk);
|
|
79
79
|
});
|
|
80
80
|
}
|
|
81
|
-
|
|
82
|
-
|
|
81
|
+
uwsResponse.cork(() => {
|
|
82
|
+
uwsResponse.end();
|
|
83
83
|
});
|
|
84
84
|
}
|
|
85
|
-
export function sendResponseToUwsOpts(
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
85
|
+
export function sendResponseToUwsOpts(uwsResponse, fetchResponse) {
|
|
86
|
+
if (!fetchResponse) {
|
|
87
|
+
uwsResponse.writeStatus('404 Not Found');
|
|
88
|
+
uwsResponse.end();
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
const isStringOrBuffer = fetchResponse.bodyType === 'Buffer' ||
|
|
92
|
+
fetchResponse.bodyType === 'String' ||
|
|
93
|
+
fetchResponse.bodyType === 'Uint8Array';
|
|
94
|
+
uwsResponse.cork(() => {
|
|
95
|
+
uwsResponse.writeStatus(`${fetchResponse.status} ${fetchResponse.statusText}`);
|
|
96
|
+
for (const [key, value] of fetchResponse.headers) {
|
|
92
97
|
// content-length causes an error with Node.js's fetch
|
|
93
98
|
if (key !== 'content-length') {
|
|
94
99
|
if (key === 'set-cookie') {
|
|
95
|
-
const setCookies =
|
|
100
|
+
const setCookies = fetchResponse.headers.getSetCookie?.();
|
|
96
101
|
if (setCookies) {
|
|
97
102
|
for (const setCookie of setCookies) {
|
|
98
|
-
|
|
103
|
+
uwsResponse.writeHeader(key, setCookie);
|
|
99
104
|
}
|
|
100
105
|
continue;
|
|
101
106
|
}
|
|
102
107
|
}
|
|
103
|
-
|
|
108
|
+
uwsResponse.writeHeader(key, value);
|
|
104
109
|
}
|
|
105
110
|
}
|
|
106
111
|
if (isStringOrBuffer) {
|
|
107
|
-
|
|
112
|
+
uwsResponse.end(fetchResponse.bodyInit);
|
|
108
113
|
}
|
|
109
114
|
});
|
|
110
115
|
if (isStringOrBuffer) {
|
|
111
116
|
return;
|
|
112
117
|
}
|
|
113
|
-
if (!
|
|
114
|
-
|
|
118
|
+
if (!fetchResponse.body) {
|
|
119
|
+
uwsResponse.end();
|
|
115
120
|
return;
|
|
116
121
|
}
|
|
117
|
-
return forwardResponseBodyToUWSResponse(
|
|
122
|
+
return forwardResponseBodyToUWSResponse(uwsResponse, fetchResponse);
|
|
118
123
|
}
|
package/package.json
CHANGED
|
@@ -24,9 +24,5 @@ interface GetRequestFromUWSOpts {
|
|
|
24
24
|
fetchAPI: FetchAPI;
|
|
25
25
|
}
|
|
26
26
|
export declare function getRequestFromUWSRequest({ req, res, fetchAPI }: GetRequestFromUWSOpts): Request;
|
|
27
|
-
|
|
28
|
-
res: UWSResponse;
|
|
29
|
-
response: Response;
|
|
30
|
-
}
|
|
31
|
-
export declare function sendResponseToUwsOpts({ res, response }: SendResponseToUWSOpts): Promise<void> | undefined;
|
|
27
|
+
export declare function sendResponseToUwsOpts(uwsResponse: UWSResponse, fetchResponse: Response): Promise<void> | undefined;
|
|
32
28
|
export {};
|
package/typings/uwebsockets.d.ts
CHANGED
|
@@ -24,9 +24,5 @@ interface GetRequestFromUWSOpts {
|
|
|
24
24
|
fetchAPI: FetchAPI;
|
|
25
25
|
}
|
|
26
26
|
export declare function getRequestFromUWSRequest({ req, res, fetchAPI }: GetRequestFromUWSOpts): Request;
|
|
27
|
-
|
|
28
|
-
res: UWSResponse;
|
|
29
|
-
response: Response;
|
|
30
|
-
}
|
|
31
|
-
export declare function sendResponseToUwsOpts({ res, response }: SendResponseToUWSOpts): Promise<void> | undefined;
|
|
27
|
+
export declare function sendResponseToUwsOpts(uwsResponse: UWSResponse, fetchResponse: Response): Promise<void> | undefined;
|
|
32
28
|
export {};
|