Skip to content

Commit 2f5839d

Browse files
committed
Clone requests/responses
1 parent 9f80e1b commit 2f5839d

File tree

2 files changed

+12
-10
lines changed

2 files changed

+12
-10
lines changed

packages/start/src/server/server-functions-handler.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,18 +52,19 @@ export async function handleServerFunction(h3Event: H3Event) {
5252
}
5353
}
5454
}
55-
if (h3Event.method === "POST") {
55+
if (request.method === "POST") {
5656
const contentType = request.headers.get("content-type");
57+
const clone = request.clone();
5758

5859
if (
5960
contentType?.startsWith("multipart/form-data") ||
6061
contentType?.startsWith("application/x-www-form-urlencoded")
6162
) {
62-
parsed.push(await event.request.formData());
63+
parsed.push(await clone.formData());
6364
} else if (contentType?.startsWith('application/json')) {
64-
parsed = await event.request.json() as any[];
65+
parsed = await clone.json() as any[];
6566
} else if (request.headers.has('x-serialized')) {
66-
parsed = (await deserializeJSONStream(event.request.clone())) as any[];
67+
parsed = (await deserializeJSONStream(clone)) as any[];
6768
}
6869
}
6970
try {

packages/start/src/server/server-runtime.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -67,25 +67,26 @@ async function fetchServerFunction(
6767
/* @ts-ignore-next-line */
6868
response.customBody = () => {
6969
if (import.meta.env.SEROVAL_MODE === "js") {
70-
return deserializeJSStream(instance, response);
70+
return deserializeJSStream(instance, response.clone());
7171
}
72-
return deserializeJSONStream(response);
72+
return deserializeJSONStream(response.clone());
7373
};
7474
}
7575
return response;
7676
}
7777

7878
const contentType = response.headers.get("Content-Type");
79+
const clone = response.clone();
7980
let result;
8081
if (contentType?.startsWith("text/plain")) {
81-
result = await response.text();
82+
result = await clone.text();
8283
} else if (contentType?.startsWith("application/json")) {
83-
result = await response.json();
84+
result = await clone.json();
8485
} else if (response.headers.get('x-serialized')) {
8586
if (import.meta.env.SEROVAL_MODE === "js") {
86-
result = await deserializeJSStream(instance, response);
87+
result = await deserializeJSStream(instance, clone);
8788
} else {
88-
result = await deserializeJSONStream(response);
89+
result = await deserializeJSONStream(clone);
8990
}
9091
}
9192
if (response.headers.has("X-Error")) {

0 commit comments

Comments
 (0)