Urara-Blog/node_modules/.pnpm-store/v3/files/e7/cacf90796429ed6fb1e4cf78594466968d25eea8c34f3311b26dea43ee64b66afacfa14c2d642229e6780d216186c120ca44937fa67fa77e62fdb8254c49d6
2022-08-14 01:14:53 +08:00

92 lines
2.6 KiB
Text

// src/client/build/react.ts
import { useState } from "react";
// src/client/build/register.ts
import { Workbox, messageSW } from "workbox-window";
var autoUpdateMode = "__SW_AUTO_UPDATE__";
var selfDestroying = "__SW_SELF_DESTROYING__";
var auto = autoUpdateMode === "true";
var autoDestroy = selfDestroying === "true";
function registerSW(options = {}) {
const {
immediate = false,
onNeedRefresh,
onOfflineReady,
onRegistered,
onRegisterError
} = options;
let wb;
let registration;
const updateServiceWorker = async (reloadPage = true) => {
if (!auto) {
if (reloadPage) {
wb == null ? void 0 : wb.addEventListener("controlling", (event) => {
if (event.isUpdate)
window.location.reload();
});
}
if (registration && registration.waiting) {
await messageSW(registration.waiting, { type: "SKIP_WAITING" });
}
}
};
if ("serviceWorker" in navigator) {
wb = new Workbox("__SW__", { scope: "__SCOPE__", type: "__TYPE__" });
wb.addEventListener("activated", (event) => {
if (event.isUpdate)
auto && window.location.reload();
else if (!autoDestroy)
onOfflineReady == null ? void 0 : onOfflineReady();
});
if (!auto) {
const showSkipWaitingPrompt = () => {
onNeedRefresh == null ? void 0 : onNeedRefresh();
};
wb.addEventListener("waiting", showSkipWaitingPrompt);
wb.addEventListener("externalwaiting", showSkipWaitingPrompt);
}
wb.register({ immediate }).then((r) => {
registration = r;
onRegistered == null ? void 0 : onRegistered(r);
}).catch((e) => {
onRegisterError == null ? void 0 : onRegisterError(e);
});
}
return updateServiceWorker;
}
// src/client/build/react.ts
function useRegisterSW(options = {}) {
const {
immediate = true,
onNeedRefresh,
onOfflineReady,
onRegistered,
onRegisterError
} = options;
const [needRefresh, setNeedRefresh] = useState(false);
const [offlineReady, setOfflineReady] = useState(false);
const [updateServiceWorker] = useState(() => {
return registerSW({
immediate,
onOfflineReady() {
setOfflineReady(true);
onOfflineReady == null ? void 0 : onOfflineReady();
},
onNeedRefresh() {
setNeedRefresh(true);
onNeedRefresh == null ? void 0 : onNeedRefresh();
},
onRegistered,
onRegisterError
});
});
return {
needRefresh: [needRefresh, setNeedRefresh],
offlineReady: [offlineReady, setOfflineReady],
updateServiceWorker
};
}
export {
useRegisterSW
};