@3m1/service-worker-updater
Version:
Manage Create React App's Service Worker update
3 lines (2 loc) • 2.53 kB
JavaScript
import e,{forwardRef as r,useState as t,useEffect as n}from"react";var o=function(){function e(){}var r=e.prototype;return r.setUpdateIsNeeded=function(){},r.clear=function(){},r.isUpdateNeeded=function(){return!1},e}(),i=function(){function e(e){this.appId=e}var r=e.prototype;return r.setUpdateIsNeeded=function(){window.localStorage.setItem(this.key(),JSON.stringify(!0))},r.clear=function(){window.localStorage.setItem(this.key(),JSON.stringify(!1))},r.isUpdateNeeded=function(){var e;return JSON.parse(null!=(e=window.localStorage.getItem(this.key()))?e:"false")},r.key=function(){return"LocalStoragePersistenceService-"+this.appId},e}(),c=function(e,r,t,n){if(e.waiting){var o=!1;navigator.serviceWorker.addEventListener("controllerchange",function(){o||(o=!0,t(),n.clear(),global.location.reload())}),e.waiting.postMessage(r)}},a=["forwardedRef"];function u(i,u){var d=void 0===u?{}:u,s=d.message,f=void 0===s?{type:"SKIP_WAITING"}:s,v=d.log,l=void 0===v?function(){return console.log("Controller loaded")}:v,g=d.persistenceService,w=void 0===g?new o:g;function p(r){var o=r.forwardedRef,u=function(e,r){if(null==e)return{};var t,n,o={},i=Object.keys(e);for(n=0;n<i.length;n++)r.indexOf(t=i[n])>=0||(o[t]=e[t]);return o}(r,a),d=t(null),s=d[0],v=d[1],g=t(!1),p=g[0],S=g[1];return n(function(){var e=function(e){v(e.detail.registration),S(!0),w.setUpdateIsNeeded()};return document.addEventListener("onNewServiceWorker",e),function(){return document.removeEventListener("onNewServiceWorker",e)}},[v,S]),n(function(){S(w.isUpdateNeeded())},[S]),e.createElement(i,Object.assign({},u,{ref:o,newServiceWorkerDetected:p,onLoadNewServiceWorkerAccept:function(){(function(e,r,t,n){try{return Promise.resolve(function(){if(!e){var o=navigator.serviceWorker.controller;return function(){if(o)return Promise.resolve(navigator.serviceWorker.register(o.scriptURL)).then(function(e){if(null==e||!e.waiting)throw new Error("ServiceWorkerRegistration not found and no waiting ServiceWorker found");c(e,r,t,n)});throw new Error("ServiceWorkerRegistration not found and no ServiceWorker detected")}()}c(e,r,t,n)}())}catch(e){return Promise.reject(e)}})(s,f,l,w).catch(function(e){throw e})}}))}return r(function(r,t){return e.createElement(p,Object.assign({},r,{forwardedRef:t}))})}var d=function(e){var r=new CustomEvent("onNewServiceWorker",{detail:{registration:e}});document.dispatchEvent(r)};export{i as LocalStoragePersistenceService,d as onServiceWorkerUpdate,u as withServiceWorkerUpdater};
//# sourceMappingURL=index.modern.js.map