UNPKG

2.09 kBTypeScriptView Raw
1import { Repeater } from '@repeaterjs/repeater';
2import type { TypedEventTarget } from '@graphql-yoga/typed-event-target';
3declare type PubSubPublishArgsByKey = {
4 [key: string]: [] | [any] | [number | string, any];
5};
6export declare type PubSubEvent<TPubSubPublishArgsByKey extends PubSubPublishArgsByKey, TKey extends Extract<keyof TPubSubPublishArgsByKey, string>> = CustomEvent<TPubSubPublishArgsByKey[TKey][1] extends undefined ? TPubSubPublishArgsByKey[TKey][0] : TPubSubPublishArgsByKey[TKey][1]>;
7export declare type PubSubEventTarget<TPubSubPublishArgsByKey extends PubSubPublishArgsByKey> = TypedEventTarget<PubSubEvent<TPubSubPublishArgsByKey, Extract<keyof TPubSubPublishArgsByKey, string>>>;
8export declare type ChannelPubSubConfig<TPubSubPublishArgsByKey extends PubSubPublishArgsByKey> = {
9 /**
10 * The event target. If not specified an (in-memory) EventTarget will be created.
11 * For multiple server replica or serverless environments a distributed EventTarget is recommended.
12 *
13 * An event dispatched on the event target MUST have a `data` property.
14 */
15 eventTarget?: PubSubEventTarget<TPubSubPublishArgsByKey>;
16};
17export declare type PubSub<TPubSubPublishArgsByKey extends PubSubPublishArgsByKey> = {
18 /**
19 * Publish a value for a given topic.
20 */
21 publish<TKey extends Extract<keyof TPubSubPublishArgsByKey, string>>(routingKey: TKey, ...args: TPubSubPublishArgsByKey[TKey]): void;
22 /**
23 * Subscribe to a topic.
24 */
25 subscribe<TKey extends Extract<keyof TPubSubPublishArgsByKey, string>>(...[routingKey, id]: TPubSubPublishArgsByKey[TKey][1] extends undefined ? [TKey] : [TKey, TPubSubPublishArgsByKey[TKey][0]]): Repeater<TPubSubPublishArgsByKey[TKey][1] extends undefined ? TPubSubPublishArgsByKey[TKey][0] : TPubSubPublishArgsByKey[TKey][1]>;
26};
27/**
28 * Utility for publishing and subscribing to events.
29 */
30export declare const createPubSub: <TPubSubPublishArgsByKey extends PubSubPublishArgsByKey>(config?: ChannelPubSubConfig<TPubSubPublishArgsByKey> | undefined) => PubSub<TPubSubPublishArgsByKey>;
31export {};