UNPKG

@serwist/next

Version:

A module that integrates Serwist into your Next.js application.

1 lines 6.84 kB
{"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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"}