From 38b3f9ec730b5bb09b88c5f201c5ae55f1e6cddc Mon Sep 17 00:00:00 2001 From: Sebastian Sebbie Silbermann Date: Fri, 29 May 2026 19:16:05 +0200 Subject: [PATCH] [16.2.x] Don't drop `FormData` entries --- ...r-dom-turbopack-server.node.development.js | 103 ++++++++++++------ ...er-dom-turbopack-server.node.production.js | 98 ++++++++++++----- ...r-dom-turbopack-server.node.development.js | 103 ++++++++++++------ ...er-dom-turbopack-server.node.production.js | 98 ++++++++++++----- ...ver-dom-webpack-server.node.development.js | 103 ++++++++++++------ ...rver-dom-webpack-server.node.production.js | 98 ++++++++++++----- ...ver-dom-webpack-server.node.development.js | 103 ++++++++++++------ ...rver-dom-webpack-server.node.production.js | 98 ++++++++++++----- 8 files changed, 556 insertions(+), 248 deletions(-) diff --git a/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-server.node.development.js b/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-server.node.development.js index 95b47f1d494c..28ea5658405b 100644 --- a/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-server.node.development.js +++ b/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-server.node.development.js @@ -6573,20 +6573,58 @@ turbopackMap, options ) { - var response = createResponse( + function flush() { + for (; null !== head; ) { + var current = head; + if (!current.complete) return; + try { + var response = response$jscomp$0, + key = current.name, + handle = current.file, + blob = new Blob(handle.chunks, { type: handle.mime }), + backingStore = response._formData; + response = key; + backingStore.data.append(response, blob, handle.filename); + var keys = backingStore.keys; + null === keys + ? ((backingStore.keys = Array.from(backingStore.data.keys())), + (backingStore.keyPointer = 0)) + : keys.push(response); + var queuedFields = current.queuedFields; + if (null !== queuedFields) + for (response = 0; response < queuedFields.length; response += 2) + resolveField( + response$jscomp$0, + queuedFields[response], + queuedFields[response + 1] + ); + } catch (error) { + busboyStream.destroy(error); + return; + } + head = current.next; + } + tail = null; + bodyFinished && !closed && ((closed = !0), close(response$jscomp$0)); + } + var response$jscomp$0 = createResponse( turbopackMap, "", options ? options.temporaryReferences : void 0, void 0, options ? options.arraySizeLimit : void 0 ), - pendingFiles = 0, - queuedFields = []; + head = null, + tail = null, + bodyFinished = !1, + closed = !1; busboyStream.on("field", function (name, value) { - if (0 < pendingFiles) queuedFields.push(name, value); + if (null !== tail) + null === tail.queuedFields && (tail.queuedFields = []), + tail.queuedFields.push(name, value); else try { - resolveField(response, name, value); + resolveField(response$jscomp$0, name, value); } catch (error) { busboyStream.destroy(error); } @@ -6601,46 +6639,45 @@ ) ); else { - pendingFiles++; - var JSCompiler_object_inline_chunks_292 = []; + var file = { chunks: [], filename: filename, mime: mimeType }, + pendingFile = { + name: name, + file: file, + complete: !1, + queuedFields: null, + next: null + }; + null === tail ? (head = pendingFile) : (tail.next = pendingFile); + tail = pendingFile; value.on("data", function (chunk) { - JSCompiler_object_inline_chunks_292.push(chunk); - }); - value.on("end", function () { try { - var blob = new Blob(JSCompiler_object_inline_chunks_292, { - type: mimeType - }), - backingStore = response._formData; - backingStore.data.append(name, blob, filename); - var keys = backingStore.keys; - null === keys - ? ((backingStore.keys = Array.from(backingStore.data.keys())), - (backingStore.keyPointer = 0)) - : keys.push(name); - pendingFiles--; - if (0 === pendingFiles) { - for (blob = 0; blob < queuedFields.length; blob += 2) - resolveField( - response, - queuedFields[blob], - queuedFields[blob + 1] - ); - queuedFields.length = 0; - } + file.chunks.push(chunk); } catch (error) { busboyStream.destroy(error); } }); + value.on("error", function (error) { + busboyStream.destroy(error); + }); + value.on("end", function () { + pendingFile.complete = !0; + flush(); + }); } }); busboyStream.on("finish", function () { - close(response); + bodyFinished = !0; + flush(); + closed || + reportGlobalError( + response$jscomp$0, + Error("Reply finished with incomplete file part.") + ); }); busboyStream.on("error", function (err) { - reportGlobalError(response, err); + reportGlobalError(response$jscomp$0, err); }); - return getChunk(response, 0); + return getChunk(response$jscomp$0, 0); }; exports.prerender = function (model, turbopackMap, options) { return new Promise(function (resolve, reject) { diff --git a/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-server.node.production.js b/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-server.node.production.js index 183cb65dbd77..b58ddee6e863 100644 --- a/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-server.node.production.js +++ b/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-server.node.production.js @@ -3645,6 +3645,43 @@ exports.decodeReplyFromAsyncIterable = function ( return getChunk(response, 0); }; exports.decodeReplyFromBusboy = function (busboyStream, turbopackMap, options) { + function flush() { + for (; null !== head; ) { + var current = head; + if (!current.complete) return; + try { + var key = current.name, + handle = current.file, + blob = new Blob(handle.chunks, { type: handle.mime }), + backingStore = response._formData, + key$jscomp$0 = key; + backingStore.data.append(key$jscomp$0, blob, handle.filename); + var keys = backingStore.keys; + null === keys + ? ((backingStore.keys = Array.from(backingStore.data.keys())), + (backingStore.keyPointer = 0)) + : keys.push(key$jscomp$0); + var queuedFields = current.queuedFields; + if (null !== queuedFields) + for ( + key$jscomp$0 = 0; + key$jscomp$0 < queuedFields.length; + key$jscomp$0 += 2 + ) + resolveField( + response, + queuedFields[key$jscomp$0], + queuedFields[key$jscomp$0 + 1] + ); + } catch (error) { + busboyStream.destroy(error); + return; + } + head = current.next; + } + tail = null; + bodyFinished && !closed && ((closed = !0), close(response)); + } var response = createResponse( turbopackMap, "", @@ -3652,10 +3689,14 @@ exports.decodeReplyFromBusboy = function (busboyStream, turbopackMap, options) { void 0, options ? options.arraySizeLimit : void 0 ), - pendingFiles = 0, - queuedFields = []; + head = null, + tail = null, + bodyFinished = !1, + closed = !1; busboyStream.on("field", function (name, value) { - if (0 < pendingFiles) queuedFields.push(name, value); + if (null !== tail) + null === tail.queuedFields && (tail.queuedFields = []), + tail.queuedFields.push(name, value); else try { resolveField(response, name, value); @@ -3673,41 +3714,40 @@ exports.decodeReplyFromBusboy = function (busboyStream, turbopackMap, options) { ) ); else { - pendingFiles++; - var JSCompiler_object_inline_chunks_299 = []; + var file = { chunks: [], filename: filename, mime: mimeType }, + pendingFile = { + name: name, + file: file, + complete: !1, + queuedFields: null, + next: null + }; + null === tail ? (head = pendingFile) : (tail.next = pendingFile); + tail = pendingFile; value.on("data", function (chunk) { - JSCompiler_object_inline_chunks_299.push(chunk); - }); - value.on("end", function () { try { - var blob = new Blob(JSCompiler_object_inline_chunks_299, { - type: mimeType - }), - backingStore = response._formData; - backingStore.data.append(name, blob, filename); - var keys = backingStore.keys; - null === keys - ? ((backingStore.keys = Array.from(backingStore.data.keys())), - (backingStore.keyPointer = 0)) - : keys.push(name); - pendingFiles--; - if (0 === pendingFiles) { - for (blob = 0; blob < queuedFields.length; blob += 2) - resolveField( - response, - queuedFields[blob], - queuedFields[blob + 1] - ); - queuedFields.length = 0; - } + file.chunks.push(chunk); } catch (error) { busboyStream.destroy(error); } }); + value.on("error", function (error) { + busboyStream.destroy(error); + }); + value.on("end", function () { + pendingFile.complete = !0; + flush(); + }); } }); busboyStream.on("finish", function () { - close(response); + bodyFinished = !0; + flush(); + closed || + reportGlobalError( + response, + Error("Reply finished with incomplete file part.") + ); }); busboyStream.on("error", function (err) { reportGlobalError(response, err); diff --git a/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js b/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js index a794710332b6..4368a6f59b17 100644 --- a/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js +++ b/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js @@ -6521,20 +6521,58 @@ turbopackMap, options ) { - var response = createResponse( + function flush() { + for (; null !== head; ) { + var current = head; + if (!current.complete) return; + try { + var response = response$jscomp$0, + key = current.name, + handle = current.file, + blob = new Blob(handle.chunks, { type: handle.mime }), + backingStore = response._formData; + response = key; + backingStore.data.append(response, blob, handle.filename); + var keys = backingStore.keys; + null === keys + ? ((backingStore.keys = Array.from(backingStore.data.keys())), + (backingStore.keyPointer = 0)) + : keys.push(response); + var queuedFields = current.queuedFields; + if (null !== queuedFields) + for (response = 0; response < queuedFields.length; response += 2) + resolveField( + response$jscomp$0, + queuedFields[response], + queuedFields[response + 1] + ); + } catch (error) { + busboyStream.destroy(error); + return; + } + head = current.next; + } + tail = null; + bodyFinished && !closed && ((closed = !0), close(response$jscomp$0)); + } + var response$jscomp$0 = createResponse( turbopackMap, "", options ? options.temporaryReferences : void 0, void 0, options ? options.arraySizeLimit : void 0 ), - pendingFiles = 0, - queuedFields = []; + head = null, + tail = null, + bodyFinished = !1, + closed = !1; busboyStream.on("field", function (name, value) { - if (0 < pendingFiles) queuedFields.push(name, value); + if (null !== tail) + null === tail.queuedFields && (tail.queuedFields = []), + tail.queuedFields.push(name, value); else try { - resolveField(response, name, value); + resolveField(response$jscomp$0, name, value); } catch (error) { busboyStream.destroy(error); } @@ -6549,46 +6587,45 @@ ) ); else { - pendingFiles++; - var JSCompiler_object_inline_chunks_292 = []; + var file = { chunks: [], filename: filename, mime: mimeType }, + pendingFile = { + name: name, + file: file, + complete: !1, + queuedFields: null, + next: null + }; + null === tail ? (head = pendingFile) : (tail.next = pendingFile); + tail = pendingFile; value.on("data", function (chunk) { - JSCompiler_object_inline_chunks_292.push(chunk); - }); - value.on("end", function () { try { - var blob = new Blob(JSCompiler_object_inline_chunks_292, { - type: mimeType - }), - backingStore = response._formData; - backingStore.data.append(name, blob, filename); - var keys = backingStore.keys; - null === keys - ? ((backingStore.keys = Array.from(backingStore.data.keys())), - (backingStore.keyPointer = 0)) - : keys.push(name); - pendingFiles--; - if (0 === pendingFiles) { - for (blob = 0; blob < queuedFields.length; blob += 2) - resolveField( - response, - queuedFields[blob], - queuedFields[blob + 1] - ); - queuedFields.length = 0; - } + file.chunks.push(chunk); } catch (error) { busboyStream.destroy(error); } }); + value.on("error", function (error) { + busboyStream.destroy(error); + }); + value.on("end", function () { + pendingFile.complete = !0; + flush(); + }); } }); busboyStream.on("finish", function () { - close(response); + bodyFinished = !0; + flush(); + closed || + reportGlobalError( + response$jscomp$0, + Error("Reply finished with incomplete file part.") + ); }); busboyStream.on("error", function (err) { - reportGlobalError(response, err); + reportGlobalError(response$jscomp$0, err); }); - return getChunk(response, 0); + return getChunk(response$jscomp$0, 0); }; exports.prerender = function (model, turbopackMap, options) { return new Promise(function (resolve, reject) { diff --git a/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.production.js b/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.production.js index 1218cefd3373..b768772319f9 100644 --- a/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.production.js +++ b/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.production.js @@ -3596,6 +3596,43 @@ exports.decodeReplyFromAsyncIterable = function ( return getChunk(response, 0); }; exports.decodeReplyFromBusboy = function (busboyStream, turbopackMap, options) { + function flush() { + for (; null !== head; ) { + var current = head; + if (!current.complete) return; + try { + var key = current.name, + handle = current.file, + blob = new Blob(handle.chunks, { type: handle.mime }), + backingStore = response._formData, + key$jscomp$0 = key; + backingStore.data.append(key$jscomp$0, blob, handle.filename); + var keys = backingStore.keys; + null === keys + ? ((backingStore.keys = Array.from(backingStore.data.keys())), + (backingStore.keyPointer = 0)) + : keys.push(key$jscomp$0); + var queuedFields = current.queuedFields; + if (null !== queuedFields) + for ( + key$jscomp$0 = 0; + key$jscomp$0 < queuedFields.length; + key$jscomp$0 += 2 + ) + resolveField( + response, + queuedFields[key$jscomp$0], + queuedFields[key$jscomp$0 + 1] + ); + } catch (error) { + busboyStream.destroy(error); + return; + } + head = current.next; + } + tail = null; + bodyFinished && !closed && ((closed = !0), close(response)); + } var response = createResponse( turbopackMap, "", @@ -3603,10 +3640,14 @@ exports.decodeReplyFromBusboy = function (busboyStream, turbopackMap, options) { void 0, options ? options.arraySizeLimit : void 0 ), - pendingFiles = 0, - queuedFields = []; + head = null, + tail = null, + bodyFinished = !1, + closed = !1; busboyStream.on("field", function (name, value) { - if (0 < pendingFiles) queuedFields.push(name, value); + if (null !== tail) + null === tail.queuedFields && (tail.queuedFields = []), + tail.queuedFields.push(name, value); else try { resolveField(response, name, value); @@ -3624,41 +3665,40 @@ exports.decodeReplyFromBusboy = function (busboyStream, turbopackMap, options) { ) ); else { - pendingFiles++; - var JSCompiler_object_inline_chunks_296 = []; + var file = { chunks: [], filename: filename, mime: mimeType }, + pendingFile = { + name: name, + file: file, + complete: !1, + queuedFields: null, + next: null + }; + null === tail ? (head = pendingFile) : (tail.next = pendingFile); + tail = pendingFile; value.on("data", function (chunk) { - JSCompiler_object_inline_chunks_296.push(chunk); - }); - value.on("end", function () { try { - var blob = new Blob(JSCompiler_object_inline_chunks_296, { - type: mimeType - }), - backingStore = response._formData; - backingStore.data.append(name, blob, filename); - var keys = backingStore.keys; - null === keys - ? ((backingStore.keys = Array.from(backingStore.data.keys())), - (backingStore.keyPointer = 0)) - : keys.push(name); - pendingFiles--; - if (0 === pendingFiles) { - for (blob = 0; blob < queuedFields.length; blob += 2) - resolveField( - response, - queuedFields[blob], - queuedFields[blob + 1] - ); - queuedFields.length = 0; - } + file.chunks.push(chunk); } catch (error) { busboyStream.destroy(error); } }); + value.on("error", function (error) { + busboyStream.destroy(error); + }); + value.on("end", function () { + pendingFile.complete = !0; + flush(); + }); } }); busboyStream.on("finish", function () { - close(response); + bodyFinished = !0; + flush(); + closed || + reportGlobalError( + response, + Error("Reply finished with incomplete file part.") + ); }); busboyStream.on("error", function (err) { reportGlobalError(response, err); diff --git a/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-server.node.development.js b/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-server.node.development.js index 25b46abe5e79..42bab05fb343 100644 --- a/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-server.node.development.js +++ b/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-server.node.development.js @@ -6575,20 +6575,58 @@ webpackMap, options ) { - var response = createResponse( + function flush() { + for (; null !== head; ) { + var current = head; + if (!current.complete) return; + try { + var response = response$jscomp$0, + key = current.name, + handle = current.file, + blob = new Blob(handle.chunks, { type: handle.mime }), + backingStore = response._formData; + response = key; + backingStore.data.append(response, blob, handle.filename); + var keys = backingStore.keys; + null === keys + ? ((backingStore.keys = Array.from(backingStore.data.keys())), + (backingStore.keyPointer = 0)) + : keys.push(response); + var queuedFields = current.queuedFields; + if (null !== queuedFields) + for (response = 0; response < queuedFields.length; response += 2) + resolveField( + response$jscomp$0, + queuedFields[response], + queuedFields[response + 1] + ); + } catch (error) { + busboyStream.destroy(error); + return; + } + head = current.next; + } + tail = null; + bodyFinished && !closed && ((closed = !0), close(response$jscomp$0)); + } + var response$jscomp$0 = createResponse( webpackMap, "", options ? options.temporaryReferences : void 0, void 0, options ? options.arraySizeLimit : void 0 ), - pendingFiles = 0, - queuedFields = []; + head = null, + tail = null, + bodyFinished = !1, + closed = !1; busboyStream.on("field", function (name, value) { - if (0 < pendingFiles) queuedFields.push(name, value); + if (null !== tail) + null === tail.queuedFields && (tail.queuedFields = []), + tail.queuedFields.push(name, value); else try { - resolveField(response, name, value); + resolveField(response$jscomp$0, name, value); } catch (error) { busboyStream.destroy(error); } @@ -6603,46 +6641,45 @@ ) ); else { - pendingFiles++; - var JSCompiler_object_inline_chunks_292 = []; + var file = { chunks: [], filename: filename, mime: mimeType }, + pendingFile = { + name: name, + file: file, + complete: !1, + queuedFields: null, + next: null + }; + null === tail ? (head = pendingFile) : (tail.next = pendingFile); + tail = pendingFile; value.on("data", function (chunk) { - JSCompiler_object_inline_chunks_292.push(chunk); - }); - value.on("end", function () { try { - var blob = new Blob(JSCompiler_object_inline_chunks_292, { - type: mimeType - }), - backingStore = response._formData; - backingStore.data.append(name, blob, filename); - var keys = backingStore.keys; - null === keys - ? ((backingStore.keys = Array.from(backingStore.data.keys())), - (backingStore.keyPointer = 0)) - : keys.push(name); - pendingFiles--; - if (0 === pendingFiles) { - for (blob = 0; blob < queuedFields.length; blob += 2) - resolveField( - response, - queuedFields[blob], - queuedFields[blob + 1] - ); - queuedFields.length = 0; - } + file.chunks.push(chunk); } catch (error) { busboyStream.destroy(error); } }); + value.on("error", function (error) { + busboyStream.destroy(error); + }); + value.on("end", function () { + pendingFile.complete = !0; + flush(); + }); } }); busboyStream.on("finish", function () { - close(response); + bodyFinished = !0; + flush(); + closed || + reportGlobalError( + response$jscomp$0, + Error("Reply finished with incomplete file part.") + ); }); busboyStream.on("error", function (err) { - reportGlobalError(response, err); + reportGlobalError(response$jscomp$0, err); }); - return getChunk(response, 0); + return getChunk(response$jscomp$0, 0); }; exports.prerender = function (model, webpackMap, options) { return new Promise(function (resolve, reject) { diff --git a/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-server.node.production.js b/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-server.node.production.js index e3cb2912b550..570afec0d7a8 100644 --- a/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-server.node.production.js +++ b/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-server.node.production.js @@ -3647,6 +3647,43 @@ exports.decodeReplyFromAsyncIterable = function ( return getChunk(response, 0); }; exports.decodeReplyFromBusboy = function (busboyStream, webpackMap, options) { + function flush() { + for (; null !== head; ) { + var current = head; + if (!current.complete) return; + try { + var key = current.name, + handle = current.file, + blob = new Blob(handle.chunks, { type: handle.mime }), + backingStore = response._formData, + key$jscomp$0 = key; + backingStore.data.append(key$jscomp$0, blob, handle.filename); + var keys = backingStore.keys; + null === keys + ? ((backingStore.keys = Array.from(backingStore.data.keys())), + (backingStore.keyPointer = 0)) + : keys.push(key$jscomp$0); + var queuedFields = current.queuedFields; + if (null !== queuedFields) + for ( + key$jscomp$0 = 0; + key$jscomp$0 < queuedFields.length; + key$jscomp$0 += 2 + ) + resolveField( + response, + queuedFields[key$jscomp$0], + queuedFields[key$jscomp$0 + 1] + ); + } catch (error) { + busboyStream.destroy(error); + return; + } + head = current.next; + } + tail = null; + bodyFinished && !closed && ((closed = !0), close(response)); + } var response = createResponse( webpackMap, "", @@ -3654,10 +3691,14 @@ exports.decodeReplyFromBusboy = function (busboyStream, webpackMap, options) { void 0, options ? options.arraySizeLimit : void 0 ), - pendingFiles = 0, - queuedFields = []; + head = null, + tail = null, + bodyFinished = !1, + closed = !1; busboyStream.on("field", function (name, value) { - if (0 < pendingFiles) queuedFields.push(name, value); + if (null !== tail) + null === tail.queuedFields && (tail.queuedFields = []), + tail.queuedFields.push(name, value); else try { resolveField(response, name, value); @@ -3675,41 +3716,40 @@ exports.decodeReplyFromBusboy = function (busboyStream, webpackMap, options) { ) ); else { - pendingFiles++; - var JSCompiler_object_inline_chunks_299 = []; + var file = { chunks: [], filename: filename, mime: mimeType }, + pendingFile = { + name: name, + file: file, + complete: !1, + queuedFields: null, + next: null + }; + null === tail ? (head = pendingFile) : (tail.next = pendingFile); + tail = pendingFile; value.on("data", function (chunk) { - JSCompiler_object_inline_chunks_299.push(chunk); - }); - value.on("end", function () { try { - var blob = new Blob(JSCompiler_object_inline_chunks_299, { - type: mimeType - }), - backingStore = response._formData; - backingStore.data.append(name, blob, filename); - var keys = backingStore.keys; - null === keys - ? ((backingStore.keys = Array.from(backingStore.data.keys())), - (backingStore.keyPointer = 0)) - : keys.push(name); - pendingFiles--; - if (0 === pendingFiles) { - for (blob = 0; blob < queuedFields.length; blob += 2) - resolveField( - response, - queuedFields[blob], - queuedFields[blob + 1] - ); - queuedFields.length = 0; - } + file.chunks.push(chunk); } catch (error) { busboyStream.destroy(error); } }); + value.on("error", function (error) { + busboyStream.destroy(error); + }); + value.on("end", function () { + pendingFile.complete = !0; + flush(); + }); } }); busboyStream.on("finish", function () { - close(response); + bodyFinished = !0; + flush(); + closed || + reportGlobalError( + response, + Error("Reply finished with incomplete file part.") + ); }); busboyStream.on("error", function (err) { reportGlobalError(response, err); diff --git a/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js b/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js index e426f7128765..20950c29dc9b 100644 --- a/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +++ b/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js @@ -6523,20 +6523,58 @@ webpackMap, options ) { - var response = createResponse( + function flush() { + for (; null !== head; ) { + var current = head; + if (!current.complete) return; + try { + var response = response$jscomp$0, + key = current.name, + handle = current.file, + blob = new Blob(handle.chunks, { type: handle.mime }), + backingStore = response._formData; + response = key; + backingStore.data.append(response, blob, handle.filename); + var keys = backingStore.keys; + null === keys + ? ((backingStore.keys = Array.from(backingStore.data.keys())), + (backingStore.keyPointer = 0)) + : keys.push(response); + var queuedFields = current.queuedFields; + if (null !== queuedFields) + for (response = 0; response < queuedFields.length; response += 2) + resolveField( + response$jscomp$0, + queuedFields[response], + queuedFields[response + 1] + ); + } catch (error) { + busboyStream.destroy(error); + return; + } + head = current.next; + } + tail = null; + bodyFinished && !closed && ((closed = !0), close(response$jscomp$0)); + } + var response$jscomp$0 = createResponse( webpackMap, "", options ? options.temporaryReferences : void 0, void 0, options ? options.arraySizeLimit : void 0 ), - pendingFiles = 0, - queuedFields = []; + head = null, + tail = null, + bodyFinished = !1, + closed = !1; busboyStream.on("field", function (name, value) { - if (0 < pendingFiles) queuedFields.push(name, value); + if (null !== tail) + null === tail.queuedFields && (tail.queuedFields = []), + tail.queuedFields.push(name, value); else try { - resolveField(response, name, value); + resolveField(response$jscomp$0, name, value); } catch (error) { busboyStream.destroy(error); } @@ -6551,46 +6589,45 @@ ) ); else { - pendingFiles++; - var JSCompiler_object_inline_chunks_292 = []; + var file = { chunks: [], filename: filename, mime: mimeType }, + pendingFile = { + name: name, + file: file, + complete: !1, + queuedFields: null, + next: null + }; + null === tail ? (head = pendingFile) : (tail.next = pendingFile); + tail = pendingFile; value.on("data", function (chunk) { - JSCompiler_object_inline_chunks_292.push(chunk); - }); - value.on("end", function () { try { - var blob = new Blob(JSCompiler_object_inline_chunks_292, { - type: mimeType - }), - backingStore = response._formData; - backingStore.data.append(name, blob, filename); - var keys = backingStore.keys; - null === keys - ? ((backingStore.keys = Array.from(backingStore.data.keys())), - (backingStore.keyPointer = 0)) - : keys.push(name); - pendingFiles--; - if (0 === pendingFiles) { - for (blob = 0; blob < queuedFields.length; blob += 2) - resolveField( - response, - queuedFields[blob], - queuedFields[blob + 1] - ); - queuedFields.length = 0; - } + file.chunks.push(chunk); } catch (error) { busboyStream.destroy(error); } }); + value.on("error", function (error) { + busboyStream.destroy(error); + }); + value.on("end", function () { + pendingFile.complete = !0; + flush(); + }); } }); busboyStream.on("finish", function () { - close(response); + bodyFinished = !0; + flush(); + closed || + reportGlobalError( + response$jscomp$0, + Error("Reply finished with incomplete file part.") + ); }); busboyStream.on("error", function (err) { - reportGlobalError(response, err); + reportGlobalError(response$jscomp$0, err); }); - return getChunk(response, 0); + return getChunk(response$jscomp$0, 0); }; exports.prerender = function (model, webpackMap, options) { return new Promise(function (resolve, reject) { diff --git a/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.production.js b/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.production.js index 129657495144..e588cb71dfb9 100644 --- a/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.production.js +++ b/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.production.js @@ -3598,6 +3598,43 @@ exports.decodeReplyFromAsyncIterable = function ( return getChunk(response, 0); }; exports.decodeReplyFromBusboy = function (busboyStream, webpackMap, options) { + function flush() { + for (; null !== head; ) { + var current = head; + if (!current.complete) return; + try { + var key = current.name, + handle = current.file, + blob = new Blob(handle.chunks, { type: handle.mime }), + backingStore = response._formData, + key$jscomp$0 = key; + backingStore.data.append(key$jscomp$0, blob, handle.filename); + var keys = backingStore.keys; + null === keys + ? ((backingStore.keys = Array.from(backingStore.data.keys())), + (backingStore.keyPointer = 0)) + : keys.push(key$jscomp$0); + var queuedFields = current.queuedFields; + if (null !== queuedFields) + for ( + key$jscomp$0 = 0; + key$jscomp$0 < queuedFields.length; + key$jscomp$0 += 2 + ) + resolveField( + response, + queuedFields[key$jscomp$0], + queuedFields[key$jscomp$0 + 1] + ); + } catch (error) { + busboyStream.destroy(error); + return; + } + head = current.next; + } + tail = null; + bodyFinished && !closed && ((closed = !0), close(response)); + } var response = createResponse( webpackMap, "", @@ -3605,10 +3642,14 @@ exports.decodeReplyFromBusboy = function (busboyStream, webpackMap, options) { void 0, options ? options.arraySizeLimit : void 0 ), - pendingFiles = 0, - queuedFields = []; + head = null, + tail = null, + bodyFinished = !1, + closed = !1; busboyStream.on("field", function (name, value) { - if (0 < pendingFiles) queuedFields.push(name, value); + if (null !== tail) + null === tail.queuedFields && (tail.queuedFields = []), + tail.queuedFields.push(name, value); else try { resolveField(response, name, value); @@ -3626,41 +3667,40 @@ exports.decodeReplyFromBusboy = function (busboyStream, webpackMap, options) { ) ); else { - pendingFiles++; - var JSCompiler_object_inline_chunks_296 = []; + var file = { chunks: [], filename: filename, mime: mimeType }, + pendingFile = { + name: name, + file: file, + complete: !1, + queuedFields: null, + next: null + }; + null === tail ? (head = pendingFile) : (tail.next = pendingFile); + tail = pendingFile; value.on("data", function (chunk) { - JSCompiler_object_inline_chunks_296.push(chunk); - }); - value.on("end", function () { try { - var blob = new Blob(JSCompiler_object_inline_chunks_296, { - type: mimeType - }), - backingStore = response._formData; - backingStore.data.append(name, blob, filename); - var keys = backingStore.keys; - null === keys - ? ((backingStore.keys = Array.from(backingStore.data.keys())), - (backingStore.keyPointer = 0)) - : keys.push(name); - pendingFiles--; - if (0 === pendingFiles) { - for (blob = 0; blob < queuedFields.length; blob += 2) - resolveField( - response, - queuedFields[blob], - queuedFields[blob + 1] - ); - queuedFields.length = 0; - } + file.chunks.push(chunk); } catch (error) { busboyStream.destroy(error); } }); + value.on("error", function (error) { + busboyStream.destroy(error); + }); + value.on("end", function () { + pendingFile.complete = !0; + flush(); + }); } }); busboyStream.on("finish", function () { - close(response); + bodyFinished = !0; + flush(); + closed || + reportGlobalError( + response, + Error("Reply finished with incomplete file part.") + ); }); busboyStream.on("error", function (err) { reportGlobalError(response, err);