@tanstack/offline-transactions
Version:
Offline-first transaction capabilities for TanStack DB
76 lines (75 loc) • 1.91 kB
JavaScript
;
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