@textea/y-socket.io
Version:
Socket.io Connector for Yjs
43 lines (39 loc) • 2.4 kB
TypeScript
import { Awareness } from 'y-protocols/awareness';
declare type ClientId = Awareness['clientID'];
interface DefaultClientData {
}
declare type EventHandler = (...args: any[]) => void;
declare type DefaultEvents = {
[eventName: string]: EventHandler;
};
declare type EventNameWithScope<Scope extends string, Type extends string = string> = `${Scope}:${Type}`;
declare type DataScope = 'data';
declare type RoomScope = 'room';
declare type YDocScope = 'doc';
declare type AwarenessScope = 'awareness';
declare type ObservableScope = YDocScope | AwarenessScope;
declare type ObservableEventName = EventNameWithScope<ObservableScope>;
declare type ValidEventScope = DataScope | RoomScope | ObservableScope;
declare type ValidateEvents<Events extends DefaultEvents & {
[EventName in keyof Events]: EventName extends EventNameWithScope<infer EventScope> ? EventScope extends ValidEventScope ? Events[EventName] : never : Events[EventName];
}> = Events;
declare type DefaultServerToClientEvents<ClientData extends DefaultClientData = DefaultClientData> = ValidateEvents<{
['data:update']: (data: ClientData) => void;
['doc:diff']: (diff: ArrayBuffer) => void;
['doc:update']: (updateV2: ArrayBuffer) => void;
['awareness:update']: (update: ArrayBuffer) => void;
}>;
interface ServerToClientEvents<ClientData extends DefaultClientData = DefaultClientData> extends DefaultServerToClientEvents<ClientData> {
}
declare type DefaultClientToServerEvents = ValidateEvents<{
['room:close']: () => void;
['doc:diff']: (diff: Uint8Array) => void;
['doc:update']: (updateV2: Uint8Array, callback?: () => void) => void;
['awareness:update']: (update: Uint8Array) => void;
}>;
interface ClientToServerEvents extends DefaultClientToServerEvents {
}
declare type ClientToServerEventNames = keyof ClientToServerEvents;
declare type BroadcastChannelMessageData<EventName extends ClientToServerEventNames = ClientToServerEventNames> = (EventName extends ObservableEventName ? [eventName: EventName, payload: Uint8Array, clientId?: ClientId] : never) | [eventName: `${AwarenessScope}:query`, clientId: ClientId];
declare type BroadcastChannelMessageEvent = MessageEvent<BroadcastChannelMessageData>;
export { BroadcastChannelMessageData, BroadcastChannelMessageEvent, ClientToServerEvents, DefaultClientToServerEvents, DefaultEvents, DefaultServerToClientEvents, ServerToClientEvents };