@whatwg-node/server 0.9.9-rc-20230807155504-cf6c2ea → 0.9.9

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.
@@ -124,25 +124,19 @@ function createServerAdapter(serverAdapterBaseObject, options) {
124
124
  };
125
125
  addWaitUntil(defaultServerContext, waitUntilPromises);
126
126
  const response$ = handleNodeRequest(nodeRequest, defaultServerContext, ...ctx);
127
- function handleFetchResponse(response) {
128
- try {
129
- if (serverResponse.closed || serverResponse.destroyed) {
130
- return;
131
- }
132
- if (response) {
133
- return (0, utils_js_1.sendNodeResponse)(response, serverResponse, nodeRequest);
134
- }
135
- serverResponse.statusCode = 404;
136
- serverResponse.end();
137
- }
138
- catch (e) {
139
- console.error(`Unexpected error: ${e.message || e}`);
140
- }
141
- }
142
127
  if ((0, utils_js_1.isPromise)(response$)) {
143
- return response$.then(handleFetchResponse);
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}`);
144
139
  }
145
- return handleFetchResponse(response$);
146
140
  }
147
141
  function handleUWS(res, req, ...ctx) {
148
142
  const waitUntilPromises = [];
@@ -162,29 +156,23 @@ function createServerAdapter(serverAdapterBaseObject, options) {
162
156
  resAborted = true;
163
157
  });
164
158
  const response$ = handleRequest(request, serverContext);
165
- function handleFetchResponse(response) {
166
- if (resAborted) {
167
- return;
168
- }
169
- try {
170
- if (!response) {
171
- res.writeStatus('404 Not Found');
172
- res.end();
173
- 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);
174
164
  }
175
- return (0, uwebsockets_js_1.sendResponseToUwsOpts)({
176
- response,
177
- res,
178
- });
179
- }
180
- catch (e) {
181
- console.error(`Unexpected error: ${e.message || e}`);
182
- }
165
+ })
166
+ .catch(err => {
167
+ console.error(`Unexpected error while handling request: ${err.message || err}`);
168
+ });
183
169
  }
184
- if ((0, utils_js_1.isPromise)(response$)) {
185
- return response$.then(handleFetchResponse);
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}`);
186
175
  }
187
- return handleFetchResponse(response$);
188
176
  }
189
177
  function handleEvent(event, ...ctx) {
190
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) => {
@@ -70,55 +70,60 @@ function getRequestFromUWSRequest({ req, res, fetchAPI }) {
70
70
  });
71
71
  }
72
72
  exports.getRequestFromUWSRequest = getRequestFromUWSRequest;
73
- async function forwardResponseBodyToUWSResponse({ res, response }) {
73
+ async function forwardResponseBodyToUWSResponse(uwsResponse, fetchResponse) {
74
74
  let resAborted = false;
75
- res.onAborted(function () {
75
+ uwsResponse.onAborted(function () {
76
76
  resAborted = true;
77
77
  });
78
- for await (const chunk of response.body) {
78
+ for await (const chunk of fetchResponse.body) {
79
79
  if (resAborted) {
80
80
  return;
81
81
  }
82
- res.cork(() => {
83
- res.write(chunk);
82
+ uwsResponse.cork(() => {
83
+ uwsResponse.write(chunk);
84
84
  });
85
85
  }
86
- res.cork(() => {
87
- res.end();
86
+ uwsResponse.cork(() => {
87
+ uwsResponse.end();
88
88
  });
89
89
  }
90
- function sendResponseToUwsOpts({ res, response }) {
91
- const isStringOrBuffer = response.bodyType === 'Buffer' ||
92
- response.bodyType === 'String' ||
93
- response.bodyType === 'Uint8Array';
94
- res.cork(() => {
95
- res.writeStatus(`${response.status} ${response.statusText}`);
96
- for (const [key, value] of response.headers) {
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 = response.headers.getSetCookie?.();
105
+ const setCookies = fetchResponse.headers.getSetCookie?.();
101
106
  if (setCookies) {
102
107
  for (const setCookie of setCookies) {
103
- res.writeHeader(key, setCookie);
108
+ uwsResponse.writeHeader(key, setCookie);
104
109
  }
105
110
  continue;
106
111
  }
107
112
  }
108
- res.writeHeader(key, value);
113
+ uwsResponse.writeHeader(key, value);
109
114
  }
110
115
  }
111
116
  if (isStringOrBuffer) {
112
- res.end(response.bodyInit);
117
+ uwsResponse.end(fetchResponse.bodyInit);
113
118
  }
114
119
  });
115
120
  if (isStringOrBuffer) {
116
121
  return;
117
122
  }
118
- if (!response.body) {
119
- res.end();
123
+ if (!fetchResponse.body) {
124
+ uwsResponse.end();
120
125
  return;
121
126
  }
122
- return forwardResponseBodyToUWSResponse({ res, response });
127
+ return forwardResponseBodyToUWSResponse(uwsResponse, fetchResponse);
123
128
  }
124
129
  exports.sendResponseToUwsOpts = sendResponseToUwsOpts;
@@ -120,25 +120,19 @@ function createServerAdapter(serverAdapterBaseObject, options) {
120
120
  };
121
121
  addWaitUntil(defaultServerContext, waitUntilPromises);
122
122
  const response$ = handleNodeRequest(nodeRequest, defaultServerContext, ...ctx);
123
- function handleFetchResponse(response) {
124
- try {
125
- if (serverResponse.closed || serverResponse.destroyed) {
126
- return;
127
- }
128
- if (response) {
129
- return sendNodeResponse(response, serverResponse, nodeRequest);
130
- }
131
- serverResponse.statusCode = 404;
132
- serverResponse.end();
133
- }
134
- catch (e) {
135
- console.error(`Unexpected error: ${e.message || e}`);
136
- }
137
- }
138
123
  if (isPromise(response$)) {
139
- return response$.then(handleFetchResponse);
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}`);
140
135
  }
141
- return handleFetchResponse(response$);
142
136
  }
143
137
  function handleUWS(res, req, ...ctx) {
144
138
  const waitUntilPromises = [];
@@ -158,29 +152,23 @@ function createServerAdapter(serverAdapterBaseObject, options) {
158
152
  resAborted = true;
159
153
  });
160
154
  const response$ = handleRequest(request, serverContext);
161
- function handleFetchResponse(response) {
162
- if (resAborted) {
163
- return;
164
- }
165
- try {
166
- if (!response) {
167
- res.writeStatus('404 Not Found');
168
- res.end();
169
- return;
155
+ if (isPromise(response$)) {
156
+ return response$
157
+ .then(response => {
158
+ if (!resAborted) {
159
+ return sendResponseToUwsOpts(res, response);
170
160
  }
171
- return sendResponseToUwsOpts({
172
- response,
173
- res,
174
- });
175
- }
176
- catch (e) {
177
- console.error(`Unexpected error: ${e.message || e}`);
178
- }
161
+ })
162
+ .catch(err => {
163
+ console.error(`Unexpected error while handling request: ${err.message || err}`);
164
+ });
179
165
  }
180
- if (isPromise(response$)) {
181
- return response$.then(handleFetchResponse);
166
+ try {
167
+ return sendResponseToUwsOpts(res, response$);
168
+ }
169
+ catch (err) {
170
+ console.error(`Unexpected error while handling request: ${err.message || err}`);
182
171
  }
183
- return handleFetchResponse(response$);
184
172
  }
185
173
  function handleEvent(event, ...ctx) {
186
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) => {
@@ -65,54 +65,59 @@ export function getRequestFromUWSRequest({ req, res, fetchAPI }) {
65
65
  signal: new UWSAbortSignal(res),
66
66
  });
67
67
  }
68
- async function forwardResponseBodyToUWSResponse({ res, response }) {
68
+ async function forwardResponseBodyToUWSResponse(uwsResponse, fetchResponse) {
69
69
  let resAborted = false;
70
- res.onAborted(function () {
70
+ uwsResponse.onAborted(function () {
71
71
  resAborted = true;
72
72
  });
73
- for await (const chunk of response.body) {
73
+ for await (const chunk of fetchResponse.body) {
74
74
  if (resAborted) {
75
75
  return;
76
76
  }
77
- res.cork(() => {
78
- res.write(chunk);
77
+ uwsResponse.cork(() => {
78
+ uwsResponse.write(chunk);
79
79
  });
80
80
  }
81
- res.cork(() => {
82
- res.end();
81
+ uwsResponse.cork(() => {
82
+ uwsResponse.end();
83
83
  });
84
84
  }
85
- export function sendResponseToUwsOpts({ res, response }) {
86
- const isStringOrBuffer = response.bodyType === 'Buffer' ||
87
- response.bodyType === 'String' ||
88
- response.bodyType === 'Uint8Array';
89
- res.cork(() => {
90
- res.writeStatus(`${response.status} ${response.statusText}`);
91
- for (const [key, value] of response.headers) {
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 = response.headers.getSetCookie?.();
100
+ const setCookies = fetchResponse.headers.getSetCookie?.();
96
101
  if (setCookies) {
97
102
  for (const setCookie of setCookies) {
98
- res.writeHeader(key, setCookie);
103
+ uwsResponse.writeHeader(key, setCookie);
99
104
  }
100
105
  continue;
101
106
  }
102
107
  }
103
- res.writeHeader(key, value);
108
+ uwsResponse.writeHeader(key, value);
104
109
  }
105
110
  }
106
111
  if (isStringOrBuffer) {
107
- res.end(response.bodyInit);
112
+ uwsResponse.end(fetchResponse.bodyInit);
108
113
  }
109
114
  });
110
115
  if (isStringOrBuffer) {
111
116
  return;
112
117
  }
113
- if (!response.body) {
114
- res.end();
118
+ if (!fetchResponse.body) {
119
+ uwsResponse.end();
115
120
  return;
116
121
  }
117
- return forwardResponseBodyToUWSResponse({ res, response });
122
+ return forwardResponseBodyToUWSResponse(uwsResponse, fetchResponse);
118
123
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@whatwg-node/server",
3
- "version": "0.9.9-rc-20230807155504-cf6c2ea",
3
+ "version": "0.9.9",
4
4
  "description": "Fetch API compliant HTTP Server adapter",
5
5
  "sideEffects": false,
6
6
  "dependencies": {
@@ -24,9 +24,5 @@ interface GetRequestFromUWSOpts {
24
24
  fetchAPI: FetchAPI;
25
25
  }
26
26
  export declare function getRequestFromUWSRequest({ req, res, fetchAPI }: GetRequestFromUWSOpts): Request;
27
- interface SendResponseToUWSOpts {
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 {};
@@ -24,9 +24,5 @@ interface GetRequestFromUWSOpts {
24
24
  fetchAPI: FetchAPI;
25
25
  }
26
26
  export declare function getRequestFromUWSRequest({ req, res, fetchAPI }: GetRequestFromUWSOpts): Request;
27
- interface SendResponseToUWSOpts {
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 {};