@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 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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@whatwg-node/server",
3
- "version": "0.4.7",
3
+ "version": "0.4.8-alpha-20220926115129-30fd673",
4
4
  "description": "Fetch API compliant HTTP Server adapter",
5
5
  "sideEffects": false,
6
6
  "peerDependencies": {
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;