{"version":3,"file":"onlineManager.mjs","sources":["../../../src/vanilla/onlineManager.ts"],"sourcesContent":["import { createSubscribable } from './subscribable'\nimport { UNDEFINED, isBoolean, isServer, isUndefined } from './utils'\n\ntype Listener = (online: boolean) => void\ntype SetupFn = (setOnline: Listener) => (() => void) | undefined\n\nexport interface OnlineManager extends ReturnType<typeof createOnlineManager> {}\n\nexport const createOnlineManager = () => {\n  let online = true\n  let cleanup: (() => void) | undefined\n  let setup: SetupFn = onOnline => {\n    if (!isServer && window.addEventListener) {\n      const onlineListener = () => onOnline(true)\n      const offlineListener = () => onOnline(false)\n      // Listen to online\n      window.addEventListener('online', onlineListener, false)\n      window.addEventListener('offline', offlineListener, false)\n\n      return () => {\n        // Be sure to unsubscribe if a new handler is set\n        window.removeEventListener('online', onlineListener)\n        window.removeEventListener('offline', offlineListener)\n      }\n    }\n  }\n\n  const [listeners, subscribe, hasListeners] = createSubscribable<Listener>(\n    function onSubscribe() {\n      if (!cleanup) {\n        setEventListener(setup)\n      }\n    },\n    function onUnsubscribe() {\n      if (!hasListeners()) {\n        cleanup?.()\n        cleanup = UNDEFINED\n      }\n    }\n  )\n\n  const onOnline = () => {\n    listeners.forEach(listener => {\n      listener(online)\n    })\n  }\n\n  const setEventListener = (setupFn: SetupFn) => {\n    setup = setupFn\n    cleanup?.()\n    cleanup = setup((online?: boolean) => {\n      if (isBoolean(online)) {\n        setOnline(online)\n      } else {\n        onOnline()\n      }\n    })\n  }\n\n  const setOnline = (isOnline: boolean) => {\n    const changed = isOnline !== online\n\n    if (changed) {\n      online = isOnline\n      onOnline?.()\n    }\n  }\n\n  const isOnline = () => {\n    if (isBoolean(online)) {\n      return online\n    }\n\n    if (isUndefined(navigator) || isUndefined(navigator.onLine)) {\n      return true\n    }\n\n    return navigator.onLine\n  }\n\n  return {\n    setEventListener,\n    setOnline,\n    isOnline,\n    subscribe,\n  }\n}\n\nexport const onlineManager = createOnlineManager()\n"],"names":["createOnlineManager","online","cleanup","setup","onOnline","isServer","window","addEventListener","onlineListener","offlineListener","removeEventListener","listeners","subscribe","hasListeners","createSubscribable","onSubscribe","setEventListener","onUnsubscribe","UNDEFINED","forEach","listener","setupFn","isBoolean","setOnline","isOnline","changed","isUndefined","navigator","onLine","onlineManager"],"mappings":"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"}