@thi.ng/csp
Version:
Primitives & operators for Communicating Sequential Processes based on async/await and async iterables
66 lines • 2.42 kB
TypeScript
import type { IObjectOf } from "@thi.ng/api";
import type { IClosable, IWriteable, TopicFn } from "./api.js";
import { Channel } from "./channel.js";
import { Mult } from "./mult.js";
/**
* Syntax sugar for {@link PubSub} ctor. Creates a new `PubSub` which allows
* multiple child subscriptions, based on given topic function.
*
* @remarks
* The topic function will be called for each received value and its result is
* used to determine which child subscription should receive the value. New
* topic (un)subscriptions can be created dynamically via
* {@link PubSub.subscribeTopic} and {@link PubSub.unsubscribeTopic} or
* {@link PubSub.unsubscribeAll}. Each topic subscription is a {@link Mult},
* which itself allows for multiple child subscriptions.
*
* @param fn
*/
export declare function pubsub<T>(fn: TopicFn<T>): PubSub<T>;
export declare function pubsub<T>(src: Channel<T>, fn: TopicFn<T>): PubSub<T>;
export declare class PubSub<T> implements IWriteable<T>, IClosable {
protected src: Channel<T>;
protected fn: TopicFn<T>;
protected topics: IObjectOf<Mult<any>>;
/**
* See {@link pubsub} for reference.
*
* @param fn
*/
constructor(fn: TopicFn<T>);
constructor(src: Channel<T>, fn: TopicFn<T>);
writable(): boolean;
write(val: T): Promise<boolean>;
close(): void;
closed(): boolean;
/**
* Creates a new topic subscription channel and returns it. Each topic is
* managed by its own {@link Mult} and can have arbitrary number of
* subscribers.
*
* @param id - topic id
*/
subscribeTopic<S extends T = T>(id: string): Channel<S>;
/**
* Attempts to remove a subscription channel for given topic `id`. Returns
* true if successful. If `close` is true (default), the given channel will
* also be closed (only if unsubscription was successful).
*
* @remarks
* See {@link Mult.subscribe} for reverse op.
*
* @param id
* @param ch
* @param close
*/
unsubscribeTopic<S extends T = T>(id: string, ch: Channel<S>, close?: boolean): boolean;
/**
* Removes all child subscription channels for given topic `id` and if
* `close` is true (default) also closes them.
*
* @param close
*/
unsubscribeAll(id: string, close?: boolean): void;
protected process(): Promise<void>;
}
//# sourceMappingURL=pubsub.d.ts.map