Skip to content

Commit 810c52b

Browse files
committed
[fix] prevent responses from hanging
1 parent b3ad29d commit 810c52b

File tree

5 files changed

+21
-37
lines changed

5 files changed

+21
-37
lines changed

.changeset/few-teachers-deliver.md

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
---
2+
'@sveltejs/adapter-node': patch
3+
'@sveltejs/kit': patch
4+
'@sveltejs/adapter-cloudflare': patch
5+
'@sveltejs/adapter-cloudflare-workers': patch
6+
'@sveltejs/adapter-netlify': patch
7+
'@sveltejs/adapter-vercel': patch
8+
---
9+
10+
[fix] prevent responses from hanging

packages/adapter-node/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,12 @@
4242
"@types/node": "^16.11.36",
4343
"c8": "^7.11.3",
4444
"compression": "^1.7.4",
45-
"node-fetch": "^3.2.4",
4645
"polka": "^1.0.0-next.22",
4746
"rimraf": "^3.0.2",
4847
"rollup": "^2.75.3",
4948
"sirv": "^2.0.2",
5049
"typescript": "^4.7.4",
50+
"undici": "^5.6.1",
5151
"uvu": "^0.5.3"
5252
}
5353
}

packages/adapter-node/tests/smoke.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { test } from 'uvu';
22
import { create_kit_middleware } from '../src/handler.js';
3-
import * as assert from 'uvu/assert';
4-
import fetch from 'node-fetch';
53
import polka from 'polka';
4+
import * as assert from 'uvu/assert';
5+
import { fetch } from 'undici';
66

77
const { PORT = 3000 } = process.env;
88
const DEFAULT_SERVER_OPTS = { render: () => {} };

packages/kit/src/node/index.js

+5-31
Original file line numberDiff line numberDiff line change
@@ -89,38 +89,12 @@ export async function setResponse(res, response) {
8989

9090
res.writeHead(response.status, headers);
9191

92-
if (response.body) {
93-
let cancelled = false;
94-
95-
const reader = response.body.getReader();
96-
97-
res.on('close', () => {
98-
reader.cancel();
99-
cancelled = true;
100-
});
101-
102-
const next = async () => {
103-
const { done, value } = await reader.read();
104-
105-
if (cancelled) return;
106-
107-
if (done) {
108-
res.end();
109-
return;
110-
}
111-
112-
res.write(Buffer.from(value), (error) => {
113-
if (error) {
114-
console.error('Error writing stream', error);
115-
res.end();
116-
} else {
117-
next();
118-
}
119-
});
120-
};
121-
122-
next();
92+
if (response.body instanceof Readable) {
93+
response.body.pipe(res);
12394
} else {
95+
if (response.body) {
96+
res.write(new Uint8Array(await response.arrayBuffer()));
97+
}
12498
res.end();
12599
}
126100
}

pnpm-lock.yaml

+3-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)