@sapphire/event-iterator
Version:
Turns event emitter events into async iterators.
78 lines (75 loc) • 2.1 kB
text/typescript
import { EventEmitter } from 'node:events';
/**
* A filter for an EventIterator.
*/
type EventIteratorFilter<V> = (value: V) => boolean;
/**
* Options to be passed to an EventIterator.
*/
interface EventIteratorOptions<V> {
/**
* The filter.
*/
filter?: EventIteratorFilter<V>;
/**
* The timeout in ms before ending the EventIterator.
*/
idle?: number;
/**
* The limit of events that pass the filter to iterate.
*/
limit?: number;
}
/**
* An EventIterator, used for asynchronously iterating over received values.
*/
declare class EventIterator<V extends unknown[]> implements AsyncIterableIterator<V> {
#private;
/**
* The emitter to listen to.
*/
readonly emitter: EventEmitter;
/**
* The event the event iterator is listening for to receive values from.
*/
readonly event: string;
/**
* The filter used to filter out values.
*/
filter: EventIteratorFilter<V>;
/**
* @param emitter The event emitter to listen to.
* @param event The event we're listening for to receives values from.
* @param options Any extra options.
*/
constructor(emitter: EventEmitter, event: string, options?: EventIteratorOptions<V>);
/**
* Whether or not the EventIterator has ended.
*/
get ended(): boolean;
/**
* Ends the EventIterator.
*/
end(): void;
/**
* The next value that's received from the EventEmitter.
*/
next(): Promise<IteratorResult<V>>;
/**
* Handles what happens when you break or return from a loop.
*/
return(): Promise<IteratorResult<V>>;
/**
* Handles what happens when you encounter an error in a loop.
*/
throw(): Promise<IteratorResult<V>>;
/**
* The symbol allowing EventIterators to be used in for-await-of loops.
*/
[Symbol.asyncIterator](): AsyncIterableIterator<V>;
/**
* Pushes a value into the queue.
*/
protected push(...value: V): void;
}
export { EventIterator, type EventIteratorFilter, type EventIteratorOptions };