UNPKG

@hocuspocus/common

Version:

shared code for multiple Hocuspocus packages

90 lines (89 loc) 2.88 kB
import type WebSocket from "ws"; import { Awareness } from "y-protocols/awareness"; import { Doc } from "yjs"; import type Connection from "./Connection.ts"; export declare class Document extends Doc { awareness: Awareness; callbacks: { onUpdate: (document: Document, connection: Connection, update: Uint8Array) => void; beforeBroadcastStateless: (document: Document, stateless: string) => void; }; connections: Map<WebSocket, { clients: Set<any>; connection: Connection; }>; directConnectionsCount: number; name: string; isLoading: boolean; isDestroyed: boolean; /** * Constructor. */ constructor(name: string, yDocOptions?: object); /** * Check if the Document (XMLFragment or Map) is empty */ isEmpty(fieldName: string): boolean; /** * Merge the given document(s) into this one */ merge(documents: Doc | Array<Doc>): Document; /** * Set a callback that will be triggered when the document is updated */ onUpdate(callback: (document: Document, connection: Connection, update: Uint8Array) => void): Document; /** * Set a callback that will be triggered before a stateless message is broadcasted */ beforeBroadcastStateless(callback: (document: Document, stateless: string) => void): Document; /** * Register a connection and a set of clients on this document keyed by the * underlying websocket connection */ addConnection(connection: Connection): Document; /** * Is the given connection registered on this document */ hasConnection(connection: Connection): boolean; /** * Remove the given connection from this document */ removeConnection(connection: Connection): Document; addDirectConnection(): Document; removeDirectConnection(): Document; /** * Get the number of active connections for this document */ getConnectionsCount(): number; /** * Get an array of registered connections */ getConnections(): Array<Connection>; /** * Get the client ids for the given connection instance */ getClients(connectionInstance: WebSocket): Set<any>; /** * Has the document awareness states */ hasAwarenessStates(): boolean; /** * Apply the given awareness update */ applyAwarenessUpdate(connection: Connection, update: Uint8Array): Document; /** * Handle an awareness update and sync changes to clients * @private */ private handleAwarenessUpdate; /** * Handle an updated document and sync changes to clients */ private handleUpdate; /** * Broadcast stateless message to all connections */ broadcastStateless(payload: string, filter?: (conn: Connection) => boolean): void; destroy(): void; } export default Document;