From a00e58ba795863f44a28f1e232f231fcb1575548 Mon Sep 17 00:00:00 2001 From: "Kamat, Trivikram" <16024985+trivikr@users.noreply.github.com> Date: Mon, 27 Jul 2026 21:18:48 -0700 Subject: [PATCH] stream: preserve push signal abort reason Pass the stream-wide signal reason directly to writer.fail() so valid non-Error abort reasons are not replaced with an AbortError. Signed-off-by: Kamat, Trivikram <16024985+trivikr@users.noreply.github.com> Assisted-by: codex:gpt-5.6-sol --- lib/internal/streams/iter/push.js | 6 ++---- test/parallel/test-stream-iter-push-basic.js | 11 +++++++++++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/lib/internal/streams/iter/push.js b/lib/internal/streams/iter/push.js index 52281b3e7990c6..2ebb8d0a0581ea 100644 --- a/lib/internal/streams/iter/push.js +++ b/lib/internal/streams/iter/push.js @@ -24,7 +24,7 @@ const { ERR_INVALID_STATE, }, } = require('internal/errors'); -const { isError, lazyDOMException } = require('internal/util'); +const { lazyDOMException } = require('internal/util'); const { validateAbortSignal, validateInteger, @@ -105,9 +105,7 @@ class PushQueue { if (this.#signal) { this.#abortHandler = () => { - this.fail(isError(this.#signal.reason) ? - this.#signal.reason : - lazyDOMException('Aborted', 'AbortError')); + this.fail(this.#signal.reason); }; onSignalAbort(this.#signal, this.#abortHandler); } diff --git a/test/parallel/test-stream-iter-push-basic.js b/test/parallel/test-stream-iter-push-basic.js index 1daa2fa16d8c75..9b1c044cac47ba 100644 --- a/test/parallel/test-stream-iter-push-basic.js +++ b/test/parallel/test-stream-iter-push-basic.js @@ -107,6 +107,16 @@ async function testAbortSignal() { ); } +async function testAbortSignalReason() { + const reason = 'test reason'; + const ac = new AbortController(); + const { writer } = push({ signal: ac.signal }); + + ac.abort(reason); + + await assert.rejects(writer.write('data'), (err) => err === reason); +} + async function testPreAbortedSignal() { const { readable } = push({ signal: AbortSignal.abort() }); await assert.rejects(async () => { @@ -172,6 +182,7 @@ Promise.all([ testWriterFail(), testConsumerBreak(), testAbortSignal(), + testAbortSignalReason(), testPreAbortedSignal(), testConsumerBreakWriteSyncReturnsFalse(), testPushWithTransforms(),