@@ -14,7 +14,6 @@ const {
14
14
ObjectCreate,
15
15
ObjectDefineProperties,
16
16
ObjectSetPrototypeOf,
17
- Promise,
18
17
PromisePrototypeThen,
19
18
PromiseResolve,
20
19
PromiseReject,
@@ -1354,7 +1353,9 @@ function readableStreamPipeTo(
1354
1353
1355
1354
const promise = createDeferredPromise ( ) ;
1356
1355
1357
- let currentWrite = PromiseResolve ( ) ;
1356
+ const state = {
1357
+ currentWrite : PromiseResolve ( ) ,
1358
+ } ;
1358
1359
1359
1360
// The error here can be undefined. The rejected arg
1360
1361
// tells us that the promise must be rejected even
@@ -1371,9 +1372,9 @@ function readableStreamPipeTo(
1371
1372
}
1372
1373
1373
1374
async function waitForCurrentWrite ( ) {
1374
- const write = currentWrite ;
1375
+ const write = state . currentWrite ;
1375
1376
await write ;
1376
- if ( write !== currentWrite )
1377
+ if ( write !== state . currentWrite )
1377
1378
await waitForCurrentWrite ( ) ;
1378
1379
}
1379
1380
@@ -1464,20 +1465,14 @@ function readableStreamPipeTo(
1464
1465
async function step ( ) {
1465
1466
if ( shuttingDown )
1466
1467
return true ;
1468
+
1467
1469
await writer [ kState ] . ready . promise ;
1468
- return new Promise ( ( resolve , reject ) => {
1469
- readableStreamDefaultReaderRead (
1470
- reader ,
1471
- {
1472
- [ kChunk ] ( chunk ) {
1473
- currentWrite = writableStreamDefaultWriterWrite ( writer , chunk ) ;
1474
- setPromiseHandled ( currentWrite ) ;
1475
- resolve ( false ) ;
1476
- } ,
1477
- [ kClose ] : ( ) => resolve ( true ) ,
1478
- [ kError ] : reject ,
1479
- } ) ;
1480
- } ) ;
1470
+
1471
+ const promise = createDeferredPromise ( ) ;
1472
+ // eslint-disable-next-line no-use-before-define
1473
+ readableStreamDefaultReaderRead ( reader , new PipeToReadableStreamReadRequest ( writer , state , promise ) ) ;
1474
+
1475
+ return promise . promise ;
1481
1476
}
1482
1477
1483
1478
async function run ( ) {
@@ -1539,6 +1534,28 @@ function readableStreamPipeTo(
1539
1534
return promise . promise ;
1540
1535
}
1541
1536
1537
+ class PipeToReadableStreamReadRequest {
1538
+ constructor ( writer , state , promise ) {
1539
+ this . writer = writer ;
1540
+ this . state = state ;
1541
+ this . promise = promise ;
1542
+ }
1543
+
1544
+ [ kChunk ] ( chunk ) {
1545
+ this . state . currentWrite = writableStreamDefaultWriterWrite ( this . writer , chunk ) ;
1546
+ setPromiseHandled ( this . state . currentWrite ) ;
1547
+ this . promise . resolve ( false ) ;
1548
+ }
1549
+
1550
+ [ kClose ] ( ) {
1551
+ this . promise . resolve ( true ) ;
1552
+ }
1553
+
1554
+ [ kError ] ( error ) {
1555
+ this . promise . reject ( error ) ;
1556
+ }
1557
+ }
1558
+
1542
1559
function readableStreamTee ( stream , cloneForBranch2 ) {
1543
1560
if ( isReadableByteStreamController ( stream [ kState ] . controller ) ) {
1544
1561
return readableByteStreamTee ( stream ) ;
0 commit comments