UNPKG

@tanstack/offline-transactions

Version:

Offline-first transaction capabilities for TanStack DB

76 lines (75 loc) 1.91 kB
"use strict"; Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); class WebOnlineDetector { constructor() { this.listeners = /* @__PURE__ */ new Set(); this.isListening = false; this.handleOnline = () => { this.notifyListeners(); }; this.handleVisibilityChange = () => { if (document.visibilityState === `visible`) { this.notifyListeners(); } }; this.startListening(); } startListening() { if (this.isListening) { return; } this.isListening = true; if (typeof window !== `undefined`) { window.addEventListener(`online`, this.handleOnline); document.addEventListener(`visibilitychange`, this.handleVisibilityChange); } } stopListening() { if (!this.isListening) { return; } this.isListening = false; if (typeof window !== `undefined`) { window.removeEventListener(`online`, this.handleOnline); document.removeEventListener( `visibilitychange`, this.handleVisibilityChange ); } } notifyListeners() { for (const listener of this.listeners) { try { listener(); } catch (error) { console.warn(`OnlineDetector listener error:`, error); } } } subscribe(callback) { this.listeners.add(callback); return () => { this.listeners.delete(callback); if (this.listeners.size === 0) { this.stopListening(); } }; } notifyOnline() { this.notifyListeners(); } isOnline() { if (typeof navigator !== `undefined`) { return navigator.onLine; } return true; } dispose() { this.stopListening(); this.listeners.clear(); } } const DefaultOnlineDetector = WebOnlineDetector; exports.DefaultOnlineDetector = DefaultOnlineDetector; exports.WebOnlineDetector = WebOnlineDetector; //# sourceMappingURL=OnlineDetector.cjs.map