From ff958084675d4937a35240c59b3e7775fc4716a2 Mon Sep 17 00:00:00 2001 From: achingbrain Date: Wed, 24 Sep 2025 13:23:33 +0300 Subject: [PATCH] fix: create hasBytes promise before await To prevent the hasBytes promise rejecting before it is awaited, defer creation until it's about to be used. --- packages/utils/src/stream-utils.ts | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/packages/utils/src/stream-utils.ts b/packages/utils/src/stream-utils.ts index e5c6463363..9581c8fe9d 100644 --- a/packages/utils/src/stream-utils.ts +++ b/packages/utils/src/stream-utils.ts @@ -116,7 +116,7 @@ export function byteStream (stream: T, opts?: ByteStre const maxBufferSize = opts?.maxBufferSize ?? DEFAULT_MAX_BUFFER_SIZE const readBuffer = new Uint8ArrayList() - let hasBytes = Promise.withResolvers() + let hasBytes: PromiseWithResolvers | undefined let unwrapped = false if (!isValid(stream)) { @@ -129,24 +129,24 @@ export function byteStream (stream: T, opts?: ByteStre if (readBuffer.byteLength > maxBufferSize) { const readBufferSize = readBuffer.byteLength readBuffer.consume(readBuffer.byteLength) - hasBytes.reject(new Error(`Read buffer overflow - ${readBufferSize} > ${maxBufferSize}`)) + hasBytes?.reject(new Error(`Read buffer overflow - ${readBufferSize} > ${maxBufferSize}`)) } - hasBytes.resolve() + hasBytes?.resolve() } stream.addEventListener('message', byteStreamOnMessageListener) const byteStreamOnCloseListener = (evt: StreamCloseEvent): void => { if (evt.error != null) { - hasBytes.reject(evt.error) + hasBytes?.reject(evt.error) } else { - hasBytes.resolve() + hasBytes?.resolve() } } stream.addEventListener('close', byteStreamOnCloseListener) const byteStreamOnRemoteCloseWrite = (): void => { - hasBytes.resolve() + hasBytes?.resolve() } stream.addEventListener('remoteCloseWrite', byteStreamOnRemoteCloseWrite) @@ -171,6 +171,7 @@ export function byteStream (stream: T, opts?: ByteStre } const bytesToRead = options?.bytes ?? 1 + hasBytes = Promise.withResolvers() while (true) { if (readBuffer.byteLength >= bytesToRead) {