@johngw/stream
Version:
Reactive programming tools using the WHATWG Streams API.
34 lines (29 loc) • 691 B
text/typescript
import { Predicate } from '@johngw/stream-common/Function'
/**
* Prevents chunks from travelling down the stream
* until the predicate returns true.
*
* @group Transformers
* @example
* ```
* --0--1--2--3--4--5--6--1--2--3--4--
*
* after(x => x > 4)
*
* ------------------5--6--1--2--3--4-
* ```
*/
export function after<T>(predicate: Predicate<T>) {
let pass = false
return new TransformStream<T, T>({
async transform(chunk, controller) {
if (pass) return controller.enqueue(chunk)
try {
pass = await predicate(chunk)
} catch (error) {
return controller.error(error)
}
if (pass) controller.enqueue(chunk)
},
})
}