@tanstack/offline-transactions
Version:
Offline-first transaction capabilities for TanStack DB
36 lines (28 loc) • 897 B
text/typescript
import type { LeaderElection } from '../types'
export abstract class BaseLeaderElection implements LeaderElection {
protected isLeaderState = false
protected listeners: Set<(isLeader: boolean) => void> = new Set()
abstract requestLeadership(): Promise<boolean>
abstract releaseLeadership(): void
isLeader(): boolean {
return this.isLeaderState
}
onLeadershipChange(callback: (isLeader: boolean) => void): () => void {
this.listeners.add(callback)
return () => {
this.listeners.delete(callback)
}
}
protected notifyLeadershipChange(isLeader: boolean): void {
if (this.isLeaderState !== isLeader) {
this.isLeaderState = isLeader
for (const listener of this.listeners) {
try {
listener(isLeader)
} catch (error) {
console.warn(`Leadership change listener error:`, error)
}
}
}
}
}