UNPKG

@zsviczian/excalidraw

Version:
28 lines (27 loc) 1.34 kB
import type { UnsubscribeCallback } from "@excalidraw/excalidraw/types"; export type AppEventPayloadMap = Record<string, unknown[]>; export type AppEventBehavior = { cardinality: "once" | "many"; replay: "none" | "last"; }; export type AppEventBehaviorMap<Events extends AppEventPayloadMap> = { [K in keyof Events]: AppEventBehavior; }; type AwaitableAppEventKeys<Events extends AppEventPayloadMap, Behavior extends AppEventBehaviorMap<Events>> = { [K in keyof Events]: Behavior[K]["cardinality"] extends "once" ? Behavior[K]["replay"] extends "last" ? K : never : never; }[keyof Events]; type AppEventPromiseValue<Args extends any[]> = Args extends [infer Only] ? Only : Args; export declare class AppEventBus<Events extends AppEventPayloadMap, Behavior extends AppEventBehaviorMap<Events>> { private readonly behavior; private readonly emitters; private readonly lastPayload; private readonly emittedOnce; constructor(behavior: Behavior); private getEmitter; private toPromiseValue; on<K extends keyof Events>(name: K, callback: (...args: Events[K]) => void): UnsubscribeCallback; on<K extends AwaitableAppEventKeys<Events, Behavior>>(name: K): Promise<AppEventPromiseValue<Events[K]>>; emit<K extends keyof Events>(name: K, ...args: Events[K]): void; clear(): void; } export {};