@whatwg-node/server 0.6.1 → 0.6.2-alpha-20230205160101-d3a1033
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/index.js +21 -12
- package/index.mjs +21 -12
- package/package.json +2 -2
- package/utils.d.ts +1 -1
package/index.js
CHANGED
|
@@ -132,32 +132,41 @@ function isReadableStream(stream) {
|
|
|
132
132
|
function isFetchEvent(event) {
|
|
133
133
|
return event != null && event.request != null && event.respondWith != null;
|
|
134
134
|
}
|
|
135
|
-
async function sendNodeResponse(
|
|
136
|
-
headers.forEach((value, name) => {
|
|
135
|
+
async function sendNodeResponse(fetchResponse, serverResponse) {
|
|
136
|
+
fetchResponse.headers.forEach((value, name) => {
|
|
137
137
|
serverResponse.setHeader(name, value);
|
|
138
138
|
});
|
|
139
|
-
serverResponse.statusCode = status;
|
|
140
|
-
serverResponse.statusMessage = statusText;
|
|
139
|
+
serverResponse.statusCode = fetchResponse.status;
|
|
140
|
+
serverResponse.statusMessage = fetchResponse.statusText;
|
|
141
141
|
// eslint-disable-next-line no-async-promise-executor
|
|
142
142
|
return new Promise(async (resolve) => {
|
|
143
143
|
serverResponse.once('close', resolve);
|
|
144
|
-
|
|
144
|
+
// Our Node-fetch enhancements
|
|
145
|
+
if ('bodyType' in fetchResponse && fetchResponse.bodyType != null && (fetchResponse.bodyType === 'String' || fetchResponse.bodyType === 'Uint8Array')) {
|
|
146
|
+
// @ts-expect-error http and http2 writes are actually compatible
|
|
147
|
+
serverResponse.write(fetchResponse.bodyInit);
|
|
145
148
|
serverResponse.end();
|
|
149
|
+
return;
|
|
146
150
|
}
|
|
147
|
-
|
|
151
|
+
// Other fetch implementations
|
|
152
|
+
const fetchBody = fetchResponse.body;
|
|
153
|
+
if (fetchBody == null) {
|
|
154
|
+
serverResponse.end();
|
|
155
|
+
}
|
|
156
|
+
else if (fetchBody[Symbol.toStringTag] === 'Uint8Array') {
|
|
148
157
|
serverResponse
|
|
149
158
|
// @ts-expect-error http and http2 writes are actually compatible
|
|
150
|
-
.write(
|
|
159
|
+
.write(fetchBody);
|
|
151
160
|
serverResponse.end();
|
|
152
161
|
}
|
|
153
|
-
else if (isReadable(
|
|
162
|
+
else if (isReadable(fetchBody)) {
|
|
154
163
|
serverResponse.once('close', () => {
|
|
155
|
-
|
|
164
|
+
fetchBody.destroy();
|
|
156
165
|
});
|
|
157
|
-
|
|
166
|
+
fetchBody.pipe(serverResponse);
|
|
158
167
|
}
|
|
159
|
-
else if (isAsyncIterable(
|
|
160
|
-
for await (const chunk of
|
|
168
|
+
else if (isAsyncIterable(fetchBody)) {
|
|
169
|
+
for await (const chunk of fetchBody) {
|
|
161
170
|
if (!serverResponse
|
|
162
171
|
// @ts-expect-error http and http2 writes are actually compatible
|
|
163
172
|
.write(chunk)) {
|
package/index.mjs
CHANGED
|
@@ -129,32 +129,41 @@ function isReadableStream(stream) {
|
|
|
129
129
|
function isFetchEvent(event) {
|
|
130
130
|
return event != null && event.request != null && event.respondWith != null;
|
|
131
131
|
}
|
|
132
|
-
async function sendNodeResponse(
|
|
133
|
-
headers.forEach((value, name) => {
|
|
132
|
+
async function sendNodeResponse(fetchResponse, serverResponse) {
|
|
133
|
+
fetchResponse.headers.forEach((value, name) => {
|
|
134
134
|
serverResponse.setHeader(name, value);
|
|
135
135
|
});
|
|
136
|
-
serverResponse.statusCode = status;
|
|
137
|
-
serverResponse.statusMessage = statusText;
|
|
136
|
+
serverResponse.statusCode = fetchResponse.status;
|
|
137
|
+
serverResponse.statusMessage = fetchResponse.statusText;
|
|
138
138
|
// eslint-disable-next-line no-async-promise-executor
|
|
139
139
|
return new Promise(async (resolve) => {
|
|
140
140
|
serverResponse.once('close', resolve);
|
|
141
|
-
|
|
141
|
+
// Our Node-fetch enhancements
|
|
142
|
+
if ('bodyType' in fetchResponse && fetchResponse.bodyType != null && (fetchResponse.bodyType === 'String' || fetchResponse.bodyType === 'Uint8Array')) {
|
|
143
|
+
// @ts-expect-error http and http2 writes are actually compatible
|
|
144
|
+
serverResponse.write(fetchResponse.bodyInit);
|
|
142
145
|
serverResponse.end();
|
|
146
|
+
return;
|
|
143
147
|
}
|
|
144
|
-
|
|
148
|
+
// Other fetch implementations
|
|
149
|
+
const fetchBody = fetchResponse.body;
|
|
150
|
+
if (fetchBody == null) {
|
|
151
|
+
serverResponse.end();
|
|
152
|
+
}
|
|
153
|
+
else if (fetchBody[Symbol.toStringTag] === 'Uint8Array') {
|
|
145
154
|
serverResponse
|
|
146
155
|
// @ts-expect-error http and http2 writes are actually compatible
|
|
147
|
-
.write(
|
|
156
|
+
.write(fetchBody);
|
|
148
157
|
serverResponse.end();
|
|
149
158
|
}
|
|
150
|
-
else if (isReadable(
|
|
159
|
+
else if (isReadable(fetchBody)) {
|
|
151
160
|
serverResponse.once('close', () => {
|
|
152
|
-
|
|
161
|
+
fetchBody.destroy();
|
|
153
162
|
});
|
|
154
|
-
|
|
163
|
+
fetchBody.pipe(serverResponse);
|
|
155
164
|
}
|
|
156
|
-
else if (isAsyncIterable(
|
|
157
|
-
for await (const chunk of
|
|
165
|
+
else if (isAsyncIterable(fetchBody)) {
|
|
166
|
+
for await (const chunk of fetchBody) {
|
|
158
167
|
if (!serverResponse
|
|
159
168
|
// @ts-expect-error http and http2 writes are actually compatible
|
|
160
169
|
.write(chunk)) {
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@whatwg-node/server",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.2-alpha-20230205160101-d3a1033",
|
|
4
4
|
"description": "Fetch API compliant HTTP Server adapter",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"dependencies": {
|
|
7
|
-
"@whatwg-node/fetch": "0.6.
|
|
7
|
+
"@whatwg-node/fetch": "0.6.7-alpha-20230205160101-d3a1033",
|
|
8
8
|
"tslib": "^2.3.1"
|
|
9
9
|
},
|
|
10
10
|
"repository": {
|
package/utils.d.ts
CHANGED
|
@@ -28,5 +28,5 @@ export declare function isNodeRequest(request: any): request is NodeRequest;
|
|
|
28
28
|
export declare function isServerResponse(stream: any): stream is NodeResponse;
|
|
29
29
|
export declare function isReadableStream(stream: any): stream is ReadableStream;
|
|
30
30
|
export declare function isFetchEvent(event: any): event is FetchEvent;
|
|
31
|
-
export declare function sendNodeResponse(
|
|
31
|
+
export declare function sendNodeResponse(fetchResponse: Response, serverResponse: NodeResponse): Promise<void>;
|
|
32
32
|
export declare function isRequestInit(val: unknown): val is RequestInit;
|