src/types/emitter.ts
import { Mapper } from 'augmentative-iterable';
import { EventEmitter } from 'events';
import { FluentEmitOptions } from './base';
import { FluentAsyncIterable } from './base';
/**
* Represents the operations using EventEmitters
* @typeparam T The type of the items in the iterable.
*/
export interface FluentIterableEmitter<T> {
/**
* Concatenates the specified Emitter to the async iterable.
*
* **IMPORTANT**: the AsyncIterable created from the EventEmitter is always based on a key event which every
* emission generates a new yielded result. The default key event is **'data'**.
*
* Also, the generated AsyncIterable will be infinite unless an ending event is emitted at some point.
* The defaults ending events are **'end'** and **'close'**. So, it's important to have in mind this behavior
* to use this feature properly. Operations that requires finiteness to be used may fall into an infinite loop.
*
* If you need to change the key event or other characteristics, you can do it through the **options** parameter
* @param emitter The EventEmitter
* @param options The EventEmitter options. Optional
* @returns The [[FluentAsyncIterable]] of the concatenated async iterables.
*/
concatEmitter(
emitter: EventEmitter,
options?: FluentEmitOptions,
): FluentAsyncIterable<T>;
/**
* Join the iterable with an EventEmitter, returning a new async iterable with a NxN combination
*
* **IMPORTANT**: the AsyncIterable created from the EventEmitter is always based on a key event which every
* emission generates a new yielded result. The default key event is **'data'**.
*
* Also, the generated AsyncIterable will be infinite unless an ending event is emitted at some point.
* The defaults ending events are **'end'** and **'close'**. So, it's important to have in mind this behavior
* to use this feature properly. Operations that requires finiteness to be used may fall into an infinite loop.
*
* If you need to change the key event or other characteristics, you can do it through the **options** parameter
* @param emitter The EventEmitter
* @param options The EventEmitter options. Optional
*/
combineEmitter<U = any>(
emitter: EventEmitter,
options?: FluentEmitOptions,
): FluentAsyncIterable<[T, U]>;
/**
* Join the iterable with another the EventEmitter, returning a new async iterable with the inner matching combinations
*
* **IMPORTANT**: the AsyncIterable created from the EventEmitter is always based on a key event which every
* emission generates a new yielded result. The default key event is **'data'**.
*
* Also, the generated AsyncIterable will be infinite unless an ending event is emitted at some point.
* The defaults ending events are **'end'** and **'close'**. So, it's important to have in mind this behavior
* to use this feature properly. Operations that requires finiteness to be used may fall into an infinite loop.
*
* If you need to change the key event or other characteristics, you can do it through the **options** parameter
* @param emitter The EventEmitter
* @param options The EventEmitter options. Optional
* @param keyA A mapper that returns the key map value from the left iterable
* @param keyB A mapper that returns the key map value from the right iterable
*/
combineEmitter<U, K>(
emitter: EventEmitter,
keyA: Mapper<T, K>,
keyB: Mapper<U, K>,
options?: FluentEmitOptions,
): FluentAsyncIterable<[T, U]>;
/**
* Join the iterable with another the EventEmitter, returning a new async iterable with the inner matching combinations
*
* **IMPORTANT**: the AsyncIterable created from the EventEmitter is always based on a key event which every
* emission generates a new yielded result. The default key event is **'data'**.
*
* Also, the generated AsyncIterable will be infinite unless an ending event is emitted at some point.
* The defaults ending events are **'end'** and **'close'**. So, it's important to have in mind this behavior
* to use this feature properly. Operations that requires finiteness to be used may fall into an infinite loop.
*
* If you need to change the key event or other characteristics, you can do it through the **options** parameter
* @param emitter The EventEmitter
* @param options The EventEmitter options. Optional
* @param keyA A mapper that returns the key map value from the left iterable
* @param keyB A mapper that returns the key map value from the right iterable
*/
combineEmitter<U, K>(
emitter: EventEmitter,
keyA: keyof T,
keyB: Mapper<U, K>,
options?: FluentEmitOptions,
): FluentAsyncIterable<[T, U]>;
}