MCPcopy Index your code
hub / github.com/nodejs/node / step

Function step

lib/internal/webstreams/readablestream.js:1600–1660  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

1598 }
1599
1600 async function step() {
1601 if (shuttingDown) return true;
1602
1603 if (dest[kState].backpressure) {
1604 await writerReadyPromise(writer).promise;
1605 if (shuttingDown) return true;
1606 }
1607
1608 const controller = source[kState].controller;
1609
1610 // Fast path: batch reads when data is buffered in a default controller.
1611 // This avoids creating PipeToReadableStreamReadRequest objects and
1612 // reduces promise allocation overhead.
1613 if (source[kState].state === 'readable' &&
1614 isReadableStreamDefaultController(controller) &&
1615 controller[kState].queue.length > 0) {
1616
1617 while (controller[kState].queue.length > 0) {
1618 if (shuttingDown) return true;
1619
1620 const chunk = dequeueValue(controller);
1621
1622 if (controller[kState].closeRequested && !controller[kState].queue.length) {
1623 readableStreamDefaultControllerClearAlgorithms(controller);
1624 readableStreamClose(source);
1625 }
1626
1627 // Write the chunk - we're already in a separate microtask from enqueue
1628 // because we awaited the writer ready promise above.
1629 state.currentWrite = writableStreamDefaultWriterWrite(writer, chunk);
1630 markPromiseAsHandled(state.currentWrite);
1631
1632 // Check backpressure after each write
1633 if (dest[kState].backpressure) {
1634 // Backpressure - stop batch and wait for ready
1635 break;
1636 } else if (dest[kState].state !== 'writable' || writableStreamCloseQueuedOrInFlight(dest)) {
1637 // Closing or erroring - stop batch and wait for shutdown
1638 break;
1639 }
1640 }
1641
1642 // Trigger pull if needed after batch
1643 readableStreamDefaultControllerCallPullIfNeeded(controller);
1644
1645 // Check if stream closed during batch
1646 if (source[kState].state === 'closed') {
1647 return true;
1648 }
1649
1650 // Yield to microtask queue between batches to allow events/signals to fire
1651 return false;
1652 }
1653
1654 // Slow path: use read request for async reads
1655 const promise = PromiseWithResolvers();
1656 // eslint-disable-next-line no-use-before-define
1657 readableStreamDefaultReaderRead(reader, new PipeToReadableStreamReadRequest(writer, state, promise));

Callers 1

runFunction · 0.70

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…