@whatwg-node/server 0.4.7 → 0.4.8-alpha-20220926115129-30fd673
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 +23 -0
- package/index.mjs +23 -0
- package/package.json +1 -1
- package/utils.d.ts +1 -0
package/index.js
CHANGED
|
@@ -126,6 +126,9 @@ function isServerResponse(stream) {
|
|
|
126
126
|
// Check all used functions are defined
|
|
127
127
|
return (stream != null && stream.setHeader != null && stream.end != null && stream.once != null && stream.write != null);
|
|
128
128
|
}
|
|
129
|
+
function isReadableStream(stream) {
|
|
130
|
+
return stream != null && stream.getReader != null;
|
|
131
|
+
}
|
|
129
132
|
function isFetchEvent(event) {
|
|
130
133
|
return event != null && event.request != null && event.respondWith != null;
|
|
131
134
|
}
|
|
@@ -150,6 +153,26 @@ async function sendNodeResponse({ headers, status, statusText, body }, serverRes
|
|
|
150
153
|
});
|
|
151
154
|
body.pipe(serverResponse);
|
|
152
155
|
}
|
|
156
|
+
else if (isReadableStream(body)) {
|
|
157
|
+
const reader = body.getReader();
|
|
158
|
+
serverResponse.once('close', () => {
|
|
159
|
+
reader.cancel();
|
|
160
|
+
});
|
|
161
|
+
// eslint-disable-next-line no-inner-declarations
|
|
162
|
+
function pump() {
|
|
163
|
+
reader.read().then(({ done, value }) => {
|
|
164
|
+
if (done) {
|
|
165
|
+
serverResponse.end(resolve);
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
serverResponse.write(value, pump);
|
|
169
|
+
}).catch(error => {
|
|
170
|
+
console.error(error);
|
|
171
|
+
serverResponse.end(resolve);
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
pump();
|
|
175
|
+
}
|
|
153
176
|
else if (isAsyncIterable(body)) {
|
|
154
177
|
for await (const chunk of body) {
|
|
155
178
|
if (!serverResponse.write(chunk)) {
|
package/index.mjs
CHANGED
|
@@ -122,6 +122,9 @@ function isServerResponse(stream) {
|
|
|
122
122
|
// Check all used functions are defined
|
|
123
123
|
return (stream != null && stream.setHeader != null && stream.end != null && stream.once != null && stream.write != null);
|
|
124
124
|
}
|
|
125
|
+
function isReadableStream(stream) {
|
|
126
|
+
return stream != null && stream.getReader != null;
|
|
127
|
+
}
|
|
125
128
|
function isFetchEvent(event) {
|
|
126
129
|
return event != null && event.request != null && event.respondWith != null;
|
|
127
130
|
}
|
|
@@ -146,6 +149,26 @@ async function sendNodeResponse({ headers, status, statusText, body }, serverRes
|
|
|
146
149
|
});
|
|
147
150
|
body.pipe(serverResponse);
|
|
148
151
|
}
|
|
152
|
+
else if (isReadableStream(body)) {
|
|
153
|
+
const reader = body.getReader();
|
|
154
|
+
serverResponse.once('close', () => {
|
|
155
|
+
reader.cancel();
|
|
156
|
+
});
|
|
157
|
+
// eslint-disable-next-line no-inner-declarations
|
|
158
|
+
function pump() {
|
|
159
|
+
reader.read().then(({ done, value }) => {
|
|
160
|
+
if (done) {
|
|
161
|
+
serverResponse.end(resolve);
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
serverResponse.write(value, pump);
|
|
165
|
+
}).catch(error => {
|
|
166
|
+
console.error(error);
|
|
167
|
+
serverResponse.end(resolve);
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
pump();
|
|
171
|
+
}
|
|
149
172
|
else if (isAsyncIterable(body)) {
|
|
150
173
|
for await (const chunk of body) {
|
|
151
174
|
if (!serverResponse.write(chunk)) {
|
package/package.json
CHANGED
package/utils.d.ts
CHANGED
|
@@ -21,6 +21,7 @@ export declare function normalizeNodeRequest(nodeRequest: NodeRequest, RequestCt
|
|
|
21
21
|
export declare function isReadable(stream: any): stream is Readable;
|
|
22
22
|
export declare function isNodeRequest(request: any): request is NodeRequest;
|
|
23
23
|
export declare function isServerResponse(stream: any): stream is ServerResponse;
|
|
24
|
+
export declare function isReadableStream(stream: any): stream is ReadableStream;
|
|
24
25
|
export declare function isFetchEvent(event: any): event is FetchEvent;
|
|
25
26
|
export declare function sendNodeResponse({ headers, status, statusText, body }: Response, serverResponse: ServerResponse): Promise<void>;
|
|
26
27
|
export declare function isRequestInit(val: unknown): val is RequestInit;
|