@whatwg-node/server 0.9.0 → 0.9.1-alpha-20230627124545-b7237a8

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/cjs/utils.js CHANGED
@@ -145,21 +145,26 @@ function endResponse(serverResponse) {
145
145
  // @ts-expect-error Avoid arguments adaptor trampoline https://v8.dev/blog/adaptor-frame
146
146
  serverResponse.end(null, null, null);
147
147
  }
148
- function getHeadersArray(headers) {
149
- const headersArray = [];
148
+ function getHeaderPairs(headers) {
149
+ const headerPairs = new Map();
150
150
  headers.forEach((value, key) => {
151
+ let headerValues = headerPairs.get(key);
152
+ if (headerValues === undefined) {
153
+ headerValues = [];
154
+ headerPairs.set(key, headerValues);
155
+ }
151
156
  if (key === 'set-cookie') {
152
157
  const setCookies = headers.getSetCookie?.();
153
158
  if (setCookies) {
154
159
  setCookies.forEach(setCookie => {
155
- headersArray.push('set-cookie', setCookie);
160
+ headerValues.push(setCookie);
156
161
  });
157
162
  return;
158
163
  }
159
164
  }
160
- headersArray.push(key, value);
165
+ headerValues.push(value);
161
166
  });
162
- return headersArray;
167
+ return headerPairs;
163
168
  }
164
169
  async function sendAsyncIterable(serverResponse, asyncIterable) {
165
170
  for await (const chunk of asyncIterable) {
@@ -172,9 +177,11 @@ async function sendAsyncIterable(serverResponse, asyncIterable) {
172
177
  endResponse(serverResponse);
173
178
  }
174
179
  function sendNodeResponse(fetchResponse, serverResponse, nodeRequest) {
175
- serverResponse.writeHead(fetchResponse.status, fetchResponse.statusText,
176
- // @ts-expect-error Node supports arrays as headers
177
- getHeadersArray(fetchResponse.headers));
180
+ serverResponse.writeHead(fetchResponse.status, fetchResponse.statusText);
181
+ const headerPairs = getHeaderPairs(fetchResponse.headers);
182
+ for (const [key, value] of headerPairs) {
183
+ serverResponse.setHeader(key, value);
184
+ }
178
185
  // Optimizations for node-fetch
179
186
  if (fetchResponse.bodyType === 'Buffer' ||
180
187
  fetchResponse.bodyType === 'String' ||
package/esm/utils.js CHANGED
@@ -135,21 +135,26 @@ function endResponse(serverResponse) {
135
135
  // @ts-expect-error Avoid arguments adaptor trampoline https://v8.dev/blog/adaptor-frame
136
136
  serverResponse.end(null, null, null);
137
137
  }
138
- function getHeadersArray(headers) {
139
- const headersArray = [];
138
+ function getHeaderPairs(headers) {
139
+ const headerPairs = new Map();
140
140
  headers.forEach((value, key) => {
141
+ let headerValues = headerPairs.get(key);
142
+ if (headerValues === undefined) {
143
+ headerValues = [];
144
+ headerPairs.set(key, headerValues);
145
+ }
141
146
  if (key === 'set-cookie') {
142
147
  const setCookies = headers.getSetCookie?.();
143
148
  if (setCookies) {
144
149
  setCookies.forEach(setCookie => {
145
- headersArray.push('set-cookie', setCookie);
150
+ headerValues.push(setCookie);
146
151
  });
147
152
  return;
148
153
  }
149
154
  }
150
- headersArray.push(key, value);
155
+ headerValues.push(value);
151
156
  });
152
- return headersArray;
157
+ return headerPairs;
153
158
  }
154
159
  async function sendAsyncIterable(serverResponse, asyncIterable) {
155
160
  for await (const chunk of asyncIterable) {
@@ -162,9 +167,11 @@ async function sendAsyncIterable(serverResponse, asyncIterable) {
162
167
  endResponse(serverResponse);
163
168
  }
164
169
  export function sendNodeResponse(fetchResponse, serverResponse, nodeRequest) {
165
- serverResponse.writeHead(fetchResponse.status, fetchResponse.statusText,
166
- // @ts-expect-error Node supports arrays as headers
167
- getHeadersArray(fetchResponse.headers));
170
+ serverResponse.writeHead(fetchResponse.status, fetchResponse.statusText);
171
+ const headerPairs = getHeaderPairs(fetchResponse.headers);
172
+ for (const [key, value] of headerPairs) {
173
+ serverResponse.setHeader(key, value);
174
+ }
168
175
  // Optimizations for node-fetch
169
176
  if (fetchResponse.bodyType === 'Buffer' ||
170
177
  fetchResponse.bodyType === 'String' ||
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@whatwg-node/server",
3
- "version": "0.9.0",
3
+ "version": "0.9.1-alpha-20230627124545-b7237a8",
4
4
  "description": "Fetch API compliant HTTP Server adapter",
5
5
  "sideEffects": false,
6
6
  "dependencies": {