diff --git a/.changeset/green-masks-confess.md b/.changeset/green-masks-confess.md new file mode 100644 index 000000000000..b9684555c66f --- /dev/null +++ b/.changeset/green-masks-confess.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +Don't automatically buffer request bodies diff --git a/packages/kit/src/node/index.js b/packages/kit/src/node/index.js index 08b61baf047e..2213322d7f46 100644 --- a/packages/kit/src/node/index.js +++ b/packages/kit/src/node/index.js @@ -18,27 +18,41 @@ function get_raw_body(req) { return null; } + let size = 0; + let cancelled = false; + return new ReadableStream({ start(controller) { req.on('error', (error) => { controller.error(error); }); - let size = 0; - - req.on('data', (chunk) => { - size += chunk.length; - - if (size > length) { - controller.error(new Error('content-length exceeded')); + req.on('end', () => { + if (!cancelled) { + controller.close(); } - - controller.enqueue(chunk); }); - - req.on('end', () => { - controller.close(); + }, + + pull(controller) { + return new Promise((fulfil) => { + req.once('data', (chunk) => { + if (!cancelled) { + size += chunk.length; + if (size > length) { + controller.error(new Error('content-length exceeded')); + } + + controller.enqueue(chunk); + } + + fulfil(); + }); }); + }, + + cancel() { + cancelled = true; } }); }