@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.
Files changed (4) hide show
  1. package/index.js +21 -12
  2. package/index.mjs +21 -12
  3. package/package.json +2 -2
  4. 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({ headers, status, statusText, body }, serverResponse) {
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
- if (body == null) {
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
- else if (body[Symbol.toStringTag] === 'Uint8Array') {
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(body);
159
+ .write(fetchBody);
151
160
  serverResponse.end();
152
161
  }
153
- else if (isReadable(body)) {
162
+ else if (isReadable(fetchBody)) {
154
163
  serverResponse.once('close', () => {
155
- body.destroy();
164
+ fetchBody.destroy();
156
165
  });
157
- body.pipe(serverResponse);
166
+ fetchBody.pipe(serverResponse);
158
167
  }
159
- else if (isAsyncIterable(body)) {
160
- for await (const chunk of body) {
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({ headers, status, statusText, body }, serverResponse) {
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
- if (body == null) {
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
- else if (body[Symbol.toStringTag] === 'Uint8Array') {
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(body);
156
+ .write(fetchBody);
148
157
  serverResponse.end();
149
158
  }
150
- else if (isReadable(body)) {
159
+ else if (isReadable(fetchBody)) {
151
160
  serverResponse.once('close', () => {
152
- body.destroy();
161
+ fetchBody.destroy();
153
162
  });
154
- body.pipe(serverResponse);
163
+ fetchBody.pipe(serverResponse);
155
164
  }
156
- else if (isAsyncIterable(body)) {
157
- for await (const chunk of body) {
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.1",
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.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({ headers, status, statusText, body }: Response, serverResponse: NodeResponse): Promise<void>;
31
+ export declare function sendNodeResponse(fetchResponse: Response, serverResponse: NodeResponse): Promise<void>;
32
32
  export declare function isRequestInit(val: unknown): val is RequestInit;