diff --git a/.changeset/angry-snails-try.md b/.changeset/angry-snails-try.md new file mode 100644 index 00000000000..aca936c0b9c --- /dev/null +++ b/.changeset/angry-snails-try.md @@ -0,0 +1,5 @@ +--- +'@builder.io/qwik': patch +--- + +Add a catch to the flush's write invocation to avoid server crash diff --git a/packages/qwik/src/core/render/ssr/render-ssr.ts b/packages/qwik/src/core/render/ssr/render-ssr.ts index 06ca202b6a2..911954aa357 100644 --- a/packages/qwik/src/core/render/ssr/render-ssr.ts +++ b/packages/qwik/src/core/render/ssr/render-ssr.ts @@ -57,7 +57,7 @@ const FLUSH_COMMENT = ''; /** @public */ export type StreamWriter = { - write: (chunk: string) => void; + write: (chunk: string) => Promise; }; /** @public */ @@ -243,7 +243,7 @@ const renderGenerator = async ( let value: AsyncGenerator; if (isFunction(generator)) { const v = generator({ - write(chunk) { + async write(chunk) { stream.write(chunk); stream.write(FLUSH_COMMENT); }, diff --git a/packages/qwik/src/server/render.ts b/packages/qwik/src/server/render.ts index 8041c3ddfbf..fe9432d6643 100644 --- a/packages/qwik/src/server/render.ts +++ b/packages/qwik/src/server/render.ts @@ -50,7 +50,10 @@ export async function renderToStream( const resolvedManifest = resolveManifest(opts.manifest); function flush() { if (buffer) { - nativeStream.write(buffer); + nativeStream.write(buffer).catch((e) => { + console.error(`Could not write buffer: ${buffer.slice(0, 200)}...`); + console.error(e); + }); buffer = ''; bufferSize = 0; networkFlushes++;