mirror of
https://github.com/Sevichecc/Urara-Blog.git
synced 2025-05-02 23:09:30 +08:00
90 lines
2.4 KiB
Text
90 lines
2.4 KiB
Text
// src/client/build/vue.ts
|
|
import { ref } from "vue";
|
|
|
|
// 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/vue.ts
|
|
function useRegisterSW(options = {}) {
|
|
const {
|
|
immediate = true,
|
|
onNeedRefresh,
|
|
onOfflineReady,
|
|
onRegistered,
|
|
onRegisterError
|
|
} = options;
|
|
const needRefresh = ref(false);
|
|
const offlineReady = ref(false);
|
|
const updateServiceWorker = registerSW({
|
|
immediate,
|
|
onNeedRefresh() {
|
|
needRefresh.value = true;
|
|
onNeedRefresh == null ? void 0 : onNeedRefresh();
|
|
},
|
|
onOfflineReady() {
|
|
offlineReady.value = true;
|
|
onOfflineReady == null ? void 0 : onOfflineReady();
|
|
},
|
|
onRegistered,
|
|
onRegisterError
|
|
});
|
|
return {
|
|
updateServiceWorker,
|
|
offlineReady,
|
|
needRefresh
|
|
};
|
|
}
|
|
export {
|
|
useRegisterSW
|
|
};
|