diffhtml-middleware-service-worker
Version:
Helps with service workers
33 lines (29 loc) • 2.71 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
typeof define === 'function' && define.amd ? define(factory) :
(global = global || self, global.serviceWorker = factory());
}(this, (function () { 'use strict';
const{assign}=Object;// Wipe all caches for this domain.
const clear=({quiet})=>caches.keys().then(cachesNames=>{return Promise.all(cachesNames.map(cacheName=>{return caches.delete(cacheName).then(function(){if(!quiet){console.warn(`diffHTML ServiceWorker: Deleted cache ${cacheName}`);}})}))});// Wipe out all the service workers for this domain.
const unregister=({quiet})=>navigator.serviceWorker.getRegistrations().then(regs=>{for(let reg of regs){reg.unregister();if(!quiet){console.warn("diffHTML ServiceWorker: Unregistering worker",reg);}}});// Simplify's creating a service worker with diffHTML.
const wrapper=({// Default to the root /service-worker.js.
url="/service-worker.js",// Allow the middleware to automatically clear all caches. By default this is
// disabled as it defeats the point of a service worker and may muck with
// other apps running on localhost.
autoClearCaches=location.search.includes("diff_autoclear"),// Useful for debugging, wipes and doesn't set. Default to the query param
// for disable.
disable=location.search.includes("diff_disable"),// Useful for debugging, logs out service worker events. Default to the query
// param to enable.
quiet=location.search.includes("diff_quiet"),// Defaults to the page root, gets set into the service worker options.
scope="/",// The remaining options to be spread into the serviceWorker configuration.
options={}})=>assign(()=>{},{displayName:"serviceWorkerTask",subscribe(){const{serviceWorker}=navigator;let chain=Promise.resolve();// If the user wants to work on the service worker, we need to clear the
// old ones out first.
if(autoClearCaches){chain=chain.then(()=>clear({quiet}));}// If we're disabling, then clear the c
if(disable){// Iterate through all service workers and remove the old ones.
chain=chain.then(()=>unregister({quiet}));}// If the user disables the service worker, do not attempt to re-register
// it.
chain=chain.then(()=>{if(!disable){return serviceWorker.register(url,{scope,...options})}});// If not in quiet mode, echo out some standard messaging and give access
// to the objects.
if(!quiet){chain.then(reg=>reg&&console.warn("diffHTML ServiceWorker: Registration succeeded",reg)).catch(err=>err&&console.warn("diffHTML ServiceWorker: Registration failed",err));}},unsubscribe(){unregister({quiet});}});var index = (opts=>wrapper(opts||{}));
return index;
})));