@johngw/stream
Version:
Reactive programming tools using the WHATWG Streams API.
34 lines (32 loc) • 753 B
text/typescript
import { DebounceBehavior } from '#transformers/debounce/Behavior'
import { DebounceState } from '#transformers/debounce/State'
/**
* Debouncing behavior to queue the leading event.
*
* @group Transformers
* @see {@link debounce:function}
* @example
* ```
* --a-b-c--T20-d--|
*
* debounce(20, new DebounceLeadingBehavior())
*
* --a----------d---
* ```
*/
export class DebounceLeadingBehavior<T> implements DebounceBehavior<T> {
preTimer(
state: DebounceState,
chunk: T,
controller: TransformStreamDefaultController<T>
): DebounceState | void {
const enqueue = !state.timer && !state.queued
if (enqueue) {
controller.enqueue(chunk)
return {
...state,
queued: enqueue,
}
}
}
}