@zsviczian/excalidraw
Version:
Excalidraw as a React component
28 lines (27 loc) • 1.34 kB
TypeScript
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 {};