| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -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); | |
| Back | FazBrowse Home | New Git URL |
0 commit comments