svelte.mjs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. // src/client/build/svelte.ts
  2. import { writable } from "svelte/store";
  3. // src/client/build/register.ts
  4. var autoUpdateMode = "__SW_AUTO_UPDATE__";
  5. var selfDestroying = "__SW_SELF_DESTROYING__";
  6. var auto = autoUpdateMode === "true";
  7. var autoDestroy = selfDestroying === "true";
  8. function registerSW(options = {}) {
  9. const {
  10. immediate = false,
  11. onNeedRefresh,
  12. onOfflineReady,
  13. onRegistered,
  14. onRegisteredSW,
  15. onRegisterError
  16. } = options;
  17. let wb;
  18. let registration;
  19. let registerPromise;
  20. let sendSkipWaitingMessage;
  21. const updateServiceWorker = async (_reloadPage = true) => {
  22. await registerPromise;
  23. if (!auto) {
  24. await (sendSkipWaitingMessage == null ? void 0 : sendSkipWaitingMessage());
  25. }
  26. };
  27. async function register() {
  28. if ("serviceWorker" in navigator) {
  29. const { Workbox } = await import("workbox-window");
  30. wb = new Workbox("__SW__", { scope: "__SCOPE__", type: "__TYPE__" });
  31. sendSkipWaitingMessage = async () => {
  32. if (registration && registration.waiting) {
  33. await (wb == null ? void 0 : wb.messageSkipWaiting());
  34. }
  35. };
  36. wb.addEventListener("activated", (event) => {
  37. if (!event.isUpdate && event.isExternal)
  38. window.location.reload();
  39. else if (event.isUpdate)
  40. auto && window.location.reload();
  41. else if (!autoDestroy)
  42. onOfflineReady == null ? void 0 : onOfflineReady();
  43. });
  44. if (!auto) {
  45. const showSkipWaitingPrompt = () => {
  46. wb == null ? void 0 : wb.addEventListener("controlling", (event) => {
  47. if (event.isUpdate)
  48. window.location.reload();
  49. });
  50. onNeedRefresh == null ? void 0 : onNeedRefresh();
  51. };
  52. wb.addEventListener("waiting", showSkipWaitingPrompt);
  53. wb.addEventListener("externalwaiting", showSkipWaitingPrompt);
  54. }
  55. wb.register({ immediate }).then((r) => {
  56. registration = r;
  57. if (onRegisteredSW)
  58. onRegisteredSW("__SW__", r);
  59. else
  60. onRegistered == null ? void 0 : onRegistered(r);
  61. }).catch((e) => {
  62. onRegisterError == null ? void 0 : onRegisterError(e);
  63. });
  64. }
  65. }
  66. registerPromise = register();
  67. return updateServiceWorker;
  68. }
  69. // src/client/build/svelte.ts
  70. function useRegisterSW(options = {}) {
  71. const {
  72. immediate = true,
  73. onNeedRefresh,
  74. onOfflineReady,
  75. onRegistered,
  76. onRegisteredSW,
  77. onRegisterError
  78. } = options;
  79. const needRefresh = writable(false);
  80. const offlineReady = writable(false);
  81. const updateServiceWorker = registerSW({
  82. immediate,
  83. onOfflineReady() {
  84. offlineReady.set(true);
  85. onOfflineReady == null ? void 0 : onOfflineReady();
  86. },
  87. onNeedRefresh() {
  88. needRefresh.set(true);
  89. onNeedRefresh == null ? void 0 : onNeedRefresh();
  90. },
  91. onRegistered,
  92. onRegisteredSW,
  93. onRegisterError
  94. });
  95. return {
  96. needRefresh,
  97. offlineReady,
  98. updateServiceWorker
  99. };
  100. }
  101. export {
  102. useRegisterSW
  103. };