UNPKG

@3m1/service-worker-updater

Version:

Manage Create React App's Service Worker update

3 lines (2 loc) 2.57 kB
var e,r=require("react"),t=(e=r)&&"object"==typeof e&&"default"in e?e.default:e,n=function(){function e(){}var r=e.prototype;return r.setUpdateIsNeeded=function(){},r.clear=function(){},r.isUpdateNeeded=function(){return!1},e}(),o=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)}},i=["forwardedRef"];exports.LocalStoragePersistenceService=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}(),exports.onServiceWorkerUpdate=function(e){var r=new CustomEvent("onNewServiceWorker",{detail:{registration:e}});document.dispatchEvent(r)},exports.withServiceWorkerUpdater=function(e,c){var a=void 0===c?{}:c,u=a.message,s=void 0===u?{type:"SKIP_WAITING"}:u,d=a.log,f=void 0===d?function(){return console.log("Controller loaded")}:d,l=a.persistenceService,v=void 0===l?new n:l;function g(n){var c=n.forwardedRef,a=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}(n,i),u=r.useState(null),d=u[0],l=u[1],g=r.useState(!1),p=g[0],w=g[1];return r.useEffect(function(){var e=function(e){l(e.detail.registration),w(!0),v.setUpdateIsNeeded()};return document.addEventListener("onNewServiceWorker",e),function(){return document.removeEventListener("onNewServiceWorker",e)}},[l,w]),r.useEffect(function(){w(v.isUpdateNeeded())},[w]),t.createElement(e,Object.assign({},a,{ref:c,newServiceWorkerDetected:p,onLoadNewServiceWorkerAccept:function(){(function(e,r,t,n){try{return Promise.resolve(function(){if(!e){var i=navigator.serviceWorker.controller;return function(){if(i)return Promise.resolve(navigator.serviceWorker.register(i.scriptURL)).then(function(e){if(null==e||!e.waiting)throw new Error("ServiceWorkerRegistration not found and no waiting ServiceWorker found");o(e,r,t,n)});throw new Error("ServiceWorkerRegistration not found and no ServiceWorker detected")}()}o(e,r,t,n)}())}catch(e){return Promise.reject(e)}})(d,s,f,v).catch(function(e){throw e})}}))}return r.forwardRef(function(e,r){return t.createElement(g,Object.assign({},e,{forwardedRef:r}))})}; //# sourceMappingURL=index.js.map