import type { TypedEventTarget } from '@graphql-yoga/typed-event-target'; import { Repeater } from '@repeaterjs/repeater'; type PubSubPublishArgsByKey = { [key: string]: [] | [any] | [number | string, any]; }; type MapToNull = T extends undefined ? null : T; export type PubSubEvent> = CustomEvent; export type PubSubEventTarget = TypedEventTarget>>; export type ChannelPubSubConfig = { /** * The event target. If not specified an (in-memory) EventTarget will be created. * For multiple server replica or serverless environments a distributed EventTarget is recommended. * * An event dispatched on the event target MUST have a `data` property. */ eventTarget?: PubSubEventTarget; }; export type PubSub = { /** * Publish a value for a given topic. */ publish>(routingKey: TKey, ...args: TPubSubPublishArgsByKey[TKey]): void; /** * Subscribe to a topic. */ subscribe>(...[routingKey, id]: TPubSubPublishArgsByKey[TKey][1] extends undefined ? [TKey] : [TKey, TPubSubPublishArgsByKey[TKey][0]]): Repeater : MapToNull>; }; /** * Utility for publishing and subscribing to events. */ export declare const createPubSub: (config?: ChannelPubSubConfig) => PubSub; export {};