diffhtml-middleware-service-worker
Version:
Helps with service workers
22 lines • 3.45 kB
JavaScript
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=void 0;function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&&(symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable})),keys.push.apply(keys,symbols)}return keys}function _objectSpread(target){for(var i=1;i<arguments.length;i++){var source=null!=arguments[i]?arguments[i]:{};i%2?ownKeys(Object(source),!0).forEach(function(key){_defineProperty(target,key,source[key])}):Object.getOwnPropertyDescriptors?Object.defineProperties(target,Object.getOwnPropertyDescriptors(source)):ownKeys(Object(source)).forEach(function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key))})}return target}function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}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,_objectSpread({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 _default=opts=>wrapper(opts||{});exports.default=_default;module.exports=exports.default;