stream: ensure that stateful transforms preserve this · nodejs/node@02c776a · GitHub
Skip to content

Commit 02c776a

Browse files
jasnelladuh95
authored andcommitted
stream: ensure that stateful transforms preserve this
Signed-off-by: James M Snell <jasnell@gmail.com> Assisted-by: Opencode PR-URL: #65658 Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
1 parent 4b29051 commit 02c776a

4 files changed

Lines changed: 57 additions & 9 deletions

File tree

‎lib/internal/streams/iter/pull.js‎

Lines changed: 15 additions & 9 deletions

‎test/parallel/test-stream-iter-pull-async.js‎

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,19 @@ async function testPullStatefulTransform() {
4949
assert.strictEqual(data, 'data-ASYNC-END');
5050
}
5151

52+
async function testPullStatefulTransformReceiver() {
53+
const descriptor = {};
54+
descriptor.transform = common.mustCall(
55+
async function*(source) {
56+
assert.strictEqual(this, descriptor);
57+
for await (const chunks of source) {
58+
yield chunks;
59+
}
60+
});
61+
62+
assert.strictEqual(await text(pull(from('receiver'), descriptor)), 'receiver');
63+
}
64+
5265
async function testPullWithAbortSignal() {
5366
async function* gen() {
5467
yield [new Uint8Array([1])];
@@ -511,6 +524,7 @@ async function testTransformOptionsNotShared() {
511524
testPullIdentity(),
512525
testPullStatelessTransform(),
513526
testPullStatefulTransform(),
527+
testPullStatefulTransformReceiver(),
514528
testPullWithAbortSignal(),
515529
testPullNormalizesSourceAtCallTime(),
516530
testPullPreAbortOrdering(),

‎test/parallel/test-stream-iter-pull-sync.js‎

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,20 @@ function testPullSyncStatefulTransform() {
7474
assert.strictEqual(data, 'data-END');
7575
}
7676

77+
function testPullSyncStatefulTransformReceiver() {
78+
const descriptor = {};
79+
descriptor.transform = common.mustCall(
80+
function*(source) {
81+
assert.strictEqual(this, descriptor);
82+
yield* source;
83+
});
84+
85+
assert.strictEqual(
86+
new TextDecoder().decode(bytesSync(pullSync(fromSync('receiver'), descriptor))),
87+
'receiver',
88+
);
89+
}
90+
7791
function testPullSyncChainedTransforms() {
7892
const addExcl = (chunks) => {
7993
if (chunks === null) return null;
@@ -210,6 +224,7 @@ Promise.all([
210224
testPullSyncNormalizesSourceAtCallTime(),
211225
testPullSyncStatelessTransform(),
212226
testPullSyncStatefulTransform(),
227+
testPullSyncStatefulTransformReceiver(),
213228
testPullSyncChainedTransforms(),
214229
testPullSyncSourceError(),
215230
testPullSyncEmptySource(),

‎test/parallel/test-stream-iter-transform-roundtrip.js‎

Lines changed: 13 additions & 0 deletions

0 commit comments

Comments
 (0)