interface PubSubDeferredPromise { promise: Promise; resolve: () => void; isDone: boolean; values: Array; } export interface PubSubEngine { publish(topic: string, payload: TPayload): void | Promise; subscribe(...topics: [string, ...string[]]): AsyncGenerator; unsubscribe(...iterators: Array>): void | Promise; close(): void | Promise; } declare class BaseInMemoryPubSub { withFilter: typeof withFilter; protected readonly ValuePromiseMap: WeakMap, PubSubDeferredPromise>; protected readonly TopicIteratorMap: Map>>; protected publishTopic(topic: Topic, payload: Payload): void; protected subscribeTopics(...topics: [Topic, ...Topic[]]): AsyncGenerator; protected unsubscribeIterators(...iterators: AsyncGenerator[]): void; protected closeIterators(): void; } export declare class InMemoryPubSub extends BaseInMemoryPubSub implements PubSubEngine { publish(topic: string, payload: TPayload): void; subscribe(...topics: [string, ...string[]]): AsyncGenerator; unsubscribe(...iterators: AsyncGenerator[]): void; close(): void; } export interface StrictPubSubEngine> { publish>(topic: Topic, payload: Topics[Topic]): void | Promise; subscribe>(...topics: [Topic, ...Topic[]]): AsyncGenerator; unsubscribe(...iterators: Array>): void | Promise; close(): void | Promise; } export declare class StrictInMemoryPubSub> extends BaseInMemoryPubSub implements StrictPubSubEngine { publish>(topic: Topic, payload: Topics[Topic]): void; subscribe>(...topics: [Topic, ...Topic[]]): AsyncGenerator; unsubscribe(...iterators: Array>): void; close(): void; } export declare function withFilter(iterator: AsyncGenerator | Promise>, filter: (data: TData) => data is TFilteredData): AsyncGenerator; export declare function withFilter(iterator: AsyncGenerator | Promise>, filter: (data: TData) => boolean): AsyncGenerator; export {};