{"version":3,"file":"index.react.mjs","names":["Serwist","createContext","useContext","SerwistContextValues","serwist","SerwistContext","useSerwist","context","Error","c","_c","Serwist","isCurrentPageOutOfScope","JSX","ReactNode","useEffect","useState","SerwistContext","useSerwist","SerwistProviderProps","swUrl","disable","register","cacheOnNavigation","reloadOnOnline","options","RegistrationOptions","children","global","Window","serwist","SerwistProvider","t0","$","t1","t2","t3","t4","undefined","t5","window","scope","navigator","type","t6","cacheUrls","url","onLine","messageSW","payload","urlsToCache","cacheCurrentPathname","location","pathname","pushState","history","replaceState","t7","args","apply","t8","args_0","addEventListener","removeEventListener","t10","t9","reload","_temp","t11","t12"],"sources":["../src/lib/context.ts","../src/index.react.tsx"],"sourcesContent":["import type { Serwist } from \"@serwist/window\";\nimport { createContext, useContext } from \"react\";\n\nexport interface SerwistContextValues {\n  serwist: Serwist | null;\n}\n\nexport const SerwistContext = createContext<SerwistContextValues>(null!);\n\nexport const useSerwist = () => {\n  const context = useContext(SerwistContext);\n  if (!context) {\n    throw new Error(\"[useSerwist]: 'SerwistContext' is not available.\");\n  }\n  return context;\n};\n","\"use client\";\nimport { Serwist } from \"@serwist/window\";\nimport { isCurrentPageOutOfScope } from \"@serwist/window/internal\";\nimport { type JSX, type ReactNode, useEffect, useState } from \"react\";\nimport { SerwistContext, useSerwist } from \"./lib/context.js\";\n\nexport interface SerwistProviderProps {\n  swUrl: string;\n  disable?: boolean;\n  register?: boolean;\n  cacheOnNavigation?: boolean;\n  reloadOnOnline?: boolean;\n  options?: RegistrationOptions;\n  children?: ReactNode;\n}\n\ndeclare global {\n  interface Window {\n    serwist: Serwist;\n  }\n}\n\n/**\n * `@serwist/window` provider for Next.js apps.\n * @param options\n * @returns\n */\nexport function SerwistProvider({\n  swUrl,\n  disable = false,\n  register = true,\n  cacheOnNavigation = true,\n  reloadOnOnline = true,\n  options,\n  children,\n}: SerwistProviderProps): JSX.Element {\n  const [serwist] = useState(() => {\n    if (typeof window === \"undefined\") return null;\n    if (disable) return null;\n    const scope = options?.scope || \"/\";\n    if (!(window.serwist && window.serwist instanceof Serwist) && \"serviceWorker\" in navigator) {\n      window.serwist = new Serwist(swUrl, { ...options, scope, type: options?.type || \"module\" });\n      if (register && !isCurrentPageOutOfScope(scope)) {\n        void window.serwist.register();\n      }\n    }\n    return window.serwist ?? null;\n  });\n  useEffect(() => {\n    const cacheUrls = async (url?: string | URL | null | undefined) => {\n      if (!window.navigator.onLine || !url) {\n        return;\n      }\n      serwist?.messageSW({\n        type: \"CACHE_URLS\",\n        payload: { urlsToCache: [url] },\n      });\n    };\n    const cacheCurrentPathname = () => cacheUrls(window.location.pathname);\n    const pushState = history.pushState;\n    const replaceState = history.replaceState;\n\n    if (cacheOnNavigation) {\n      history.pushState = (...args) => {\n        pushState.apply(history, args);\n        cacheUrls(args[2]);\n      };\n      history.replaceState = (...args) => {\n        replaceState.apply(history, args);\n        cacheUrls(args[2]);\n      };\n      window.addEventListener(\"online\", cacheCurrentPathname);\n    }\n\n    return () => {\n      history.pushState = pushState;\n      history.replaceState = replaceState;\n      window.removeEventListener(\"online\", cacheCurrentPathname);\n    };\n  }, [serwist?.messageSW, cacheOnNavigation]);\n  useEffect(() => {\n    const reload = () => location.reload();\n    if (reloadOnOnline) {\n      window.addEventListener(\"online\", reload);\n    }\n    return () => {\n      window.removeEventListener(\"online\", reload);\n    };\n  }, [reloadOnOnline]);\n  return <SerwistContext.Provider value={{ serwist }}>{children}</SerwistContext.Provider>;\n}\n\nexport { useSerwist };\n"],"mappings":"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"}