UNPKG

resig.js

Version:

Universal reactive signal library with complete platform features: signals, animations, CRDTs, scheduling, DOM integration. Works identically across React, SolidJS, Svelte, Vue, and Qwik.

75 lines (74 loc) 2.51 kB
/** * Real-time Sync System * Uses CRDT.merge() via BroadcastChannel with commutative monoid operations */ import { Signal } from '../core/signal'; import { CRDT } from '../crdt'; export interface SyncMessage<T = any> { type: 'operation' | 'state' | 'heartbeat' | 'join' | 'leave'; nodeId: string; timestamp: number; data: T; operationId: string; vectorClock: Record<string, number>; } export interface SyncConfig { channelName: string; nodeId: string; heartbeatInterval?: number; conflictResolution?: 'lww' | 'vector-clock' | 'custom'; customResolver?: <T>(local: T, remote: T, context: SyncContext) => T; } export interface SyncContext { localTimestamp: number; remoteTimestamp: number; localNodeId: string; remoteNodeId: string; operationType: string; } export interface ConnectionState { isConnected: boolean; connectedNodes: Set<string>; lastHeartbeat: number; messageQueue: SyncMessage[]; syncErrors: Error[]; } export declare class RealtimeSync { private config; private channel; private nodeId; private vectorClock; private connectionState; private crdts; private operationLog; private heartbeatTimer; constructor(config: SyncConfig); private setupChannel; private handleMessage; private handleOperation; private handleStateSync; private handleHeartbeat; private handleNodeJoin; private handleNodeLeave; private mergeVectorClock; private incrementVectorClock; private sendMessage; private generateOperationId; private startHeartbeat; private announceJoin; private sendStateToNode; private requestStateSync; private handleSyncError; private notifySubscribers; registerCRDT<T>(id: string, crdt: CRDT<T>): void; unregisterCRDT(id: string): void; getCRDT<T>(id: string): CRDT<T> | undefined; getConnectionState(): Signal<ConnectionState>; getOperationLog(): Signal<SyncMessage[]>; forcSync(): void; disconnect(): void; } export declare const createSyncedCounter: (sync: RealtimeSync, id: string, nodeId: string, _initialValue?: number) => Signal<number>; export declare const createSyncedSet: <T>(sync: RealtimeSync, id: string, nodeId: string, initialItems?: T[]) => Signal<Set<T>>; export declare const createSyncedRegister: <T>(sync: RealtimeSync, id: string, nodeId: string, initialValue: T) => Signal<T>; export declare const createRealtimeSync: (config: SyncConfig) => RealtimeSync;