register.mjs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. // src/client/build/register.ts
  2. var autoUpdateMode = "__SW_AUTO_UPDATE__";
  3. var selfDestroying = "__SW_SELF_DESTROYING__";
  4. var auto = autoUpdateMode === "true";
  5. var autoDestroy = selfDestroying === "true";
  6. function registerSW(options = {}) {
  7. const {
  8. immediate = false,
  9. onNeedRefresh,
  10. onOfflineReady,
  11. onRegistered,
  12. onRegisteredSW,
  13. onRegisterError
  14. } = options;
  15. let wb;
  16. let registration;
  17. let registerPromise;
  18. let sendSkipWaitingMessage;
  19. const updateServiceWorker = async (_reloadPage = true) => {
  20. await registerPromise;
  21. if (!auto) {
  22. await (sendSkipWaitingMessage == null ? void 0 : sendSkipWaitingMessage());
  23. }
  24. };
  25. async function register() {
  26. if ("serviceWorker" in navigator) {
  27. const { Workbox } = await import("workbox-window");
  28. wb = new Workbox("__SW__", { scope: "__SCOPE__", type: "__TYPE__" });
  29. sendSkipWaitingMessage = async () => {
  30. if (registration && registration.waiting) {
  31. await (wb == null ? void 0 : wb.messageSkipWaiting());
  32. }
  33. };
  34. wb.addEventListener("activated", (event) => {
  35. if (!event.isUpdate && event.isExternal)
  36. window.location.reload();
  37. else if (event.isUpdate)
  38. auto && window.location.reload();
  39. else if (!autoDestroy)
  40. onOfflineReady == null ? void 0 : onOfflineReady();
  41. });
  42. if (!auto) {
  43. const showSkipWaitingPrompt = () => {
  44. wb == null ? void 0 : wb.addEventListener("controlling", (event) => {
  45. if (event.isUpdate)
  46. window.location.reload();
  47. });
  48. onNeedRefresh == null ? void 0 : onNeedRefresh();
  49. };
  50. wb.addEventListener("waiting", showSkipWaitingPrompt);
  51. wb.addEventListener("externalwaiting", showSkipWaitingPrompt);
  52. }
  53. wb.register({ immediate }).then((r) => {
  54. registration = r;
  55. if (onRegisteredSW)
  56. onRegisteredSW("__SW__", r);
  57. else
  58. onRegistered == null ? void 0 : onRegistered(r);
  59. }).catch((e) => {
  60. onRegisterError == null ? void 0 : onRegisterError(e);
  61. });
  62. }
  63. }
  64. registerPromise = register();
  65. return updateServiceWorker;
  66. }
  67. export {
  68. registerSW
  69. };