@aws-amplify/core
Version:
Core category of aws-amplify
49 lines (47 loc) • 1.89 kB
JavaScript
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
Object.defineProperty(exports, "__esModule", { value: true });
exports.Reachability = void 0;
const rxjs_1 = require("rxjs");
const utils_1 = require("../utils");
class Reachability {
networkMonitor(_) {
const globalObj = (0, utils_1.isWebWorker)()
? self
: typeof window !== 'undefined' && window;
if (!globalObj) {
return (0, rxjs_1.from)([{ online: true }]);
}
return new rxjs_1.Observable(observer => {
observer.next({ online: globalObj.navigator.onLine });
const notifyOnline = () => {
observer.next({ online: true });
};
const notifyOffline = () => {
observer.next({ online: false });
};
globalObj.addEventListener('online', notifyOnline);
globalObj.addEventListener('offline', notifyOffline);
Reachability._observers.push(observer);
return () => {
globalObj.removeEventListener('online', notifyOnline);
globalObj.removeEventListener('offline', notifyOffline);
Reachability._observers = Reachability._observers.filter(_observer => _observer !== observer);
};
});
}
// expose observers to simulate offline mode for integration testing
static _observerOverride(status) {
for (const observer of this._observers) {
if (observer.closed) {
this._observers = this._observers.filter(_observer => _observer !== observer);
continue;
}
observer?.next && observer.next(status);
}
}
}
exports.Reachability = Reachability;
Reachability._observers = [];
//# sourceMappingURL=Reachability.js.map
;