mirror of
https://github.com/Sevichecc/Urara-Blog.git
synced 2025-05-02 23:09:30 +08:00
56 lines
1.7 KiB
Text
56 lines
1.7 KiB
Text
// 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;
|
|
}
|
|
export {
|
|
registerSW
|
|
};
|