@textea/y-socket.io
Version:
Socket.io Connector for Yjs
43 lines (39 loc) • 1.58 kB
TypeScript
import { Awareness } from 'y-protocols/awareness';
import * as Y from 'yjs';
import { Mutate, StoreApi } from 'zustand';
import { Room } from 'socket.io-adapter';
declare type RoomName = Room;
interface DefaultClientData {
}
interface Options {
awareness?: Awareness;
/**
* @default true
*/
autoConnect?: boolean;
/**
* @default true
*/
autoConnectBroadcastChannel?: boolean;
}
interface SocketState {
connecting: boolean;
connected: boolean;
synced: boolean;
error: string | null;
}
interface SocketIOProviderState<ClientData extends DefaultClientData = DefaultClientData> extends SocketState {
data: ClientData | null;
}
declare type ReadonlyStore<Store extends StoreApi<unknown>> = Omit<Store, 'setState'>;
declare type SocketIOProviderStore<ClientData extends DefaultClientData> = ReadonlyStore<Mutate<StoreApi<SocketIOProviderState<ClientData>>, [['zustand/subscribeWithSelector', never]]>>;
interface SocketIOProvider<ClientData extends DefaultClientData = DefaultClientData> extends SocketIOProviderStore<ClientData> {
connect: () => void;
closeRoom: () => void;
disconnect: () => void;
connectBroadcastChannel: () => void;
disconnectBroadcastChannel: () => void;
}
declare type CreateSocketIOProvider = <ClientData extends DefaultClientData>(serverUrl: string, roomName: RoomName, doc: Y.Doc, options?: Options) => SocketIOProvider<ClientData>;
declare const createSocketIOProvider: CreateSocketIOProvider;
export { Options, SocketIOProvider, SocketIOProviderState, createSocketIOProvider };