mirror of
https://github.com/Sevichecc/Urara-Blog.git
synced 2025-05-02 16:59:30 +08:00
92 lines
2.6 KiB
Text
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
|
|
};
|