59 lines
1.8 KiB
Markdown
59 lines
1.8 KiB
Markdown
# push-take-until
|
||
|
||
Take values from a source stream until a signal stream emits or ends.
|
||
|
||
Published as `@push-stream-std/push-take-until`.
|
||
|
||
## Synopsis
|
||
|
||
```js
|
||
import takeUntil from '@push-stream-std/push-take-until';
|
||
|
||
const signal = pushable();
|
||
const untilSignal = takeUntil(signal);
|
||
|
||
values([1, 2, 3, 4, 5]).pipe(untilSignal).pipe(collect(function (err, result) {
|
||
console.log(result); // [1, 2] — signal ended after 2 values
|
||
}));
|
||
|
||
// End the signal stream to stop the outer stream
|
||
signal.end();
|
||
```
|
||
|
||
## Install
|
||
|
||
```bash
|
||
npm config set @push-stream-std:registry https://hub.kl1.tenere.ai/api/packages/push-stream-std/npm/
|
||
npm config set -- //hub.kl1.tenere.ai/api/packages/push-stream-std/npm/:_authToken "$PACKAGE_TOKEN"
|
||
npm install @push-stream-std/push-take-until
|
||
```
|
||
|
||
## Description
|
||
|
||
A push-stream through that passes through values from the source until the provided signal stream ends. When the signal stream ends (either normally or via abort), the take-until stream immediately ends the upstream source and downstream sink, closing the pipeline. This is useful for implementing cancellation patterns — for example, taking values from an event stream until a "stop" button is clicked.
|
||
|
||
## API
|
||
|
||
### `takeUntil(signalStream)`
|
||
|
||
Creates a take-until through stream.
|
||
|
||
- **signalStream** `object` – A push-stream source. The take-until stream pipes the signal stream to an internal sink that tracks when the signal ends. When the signal's `end()` or `abort()` fires, the take-until stream ends.
|
||
- **Returns** A through object with `pipe()`, `write()`, `end()`, `abort()`, `resume()`, `source`, `paused`, `ended`.
|
||
|
||
## Tests
|
||
|
||
```bash
|
||
npm test
|
||
```
|
||
|
||
Tests cover passthrough before signal ends, stopping after signal end, normal end without signal, signal abort propagation, and idempotent signal end handling.
|
||
|
||
## Requirements
|
||
|
||
Node.js 18 or later. ESM only.
|
||
|
||
## License
|
||
|
||
MIT
|