Skip to content

Instantly share code, notes, and snippets.

@tobiu
Created March 28, 2022 08:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tobiu/183155eb4adadbe49bfecd25e1d89d83 to your computer and use it in GitHub Desktop.
Save tobiu/183155eb4adadbe49bfecd25e1d89d83 to your computer and use it in GitHub Desktop.
Neo.main.addon.ServiceWorker
import Base from '../../core/Base.mjs';
import WorkerManager from '../../worker/Manager.mjs';
/**
* Creates a ServiceWorker instance, in case Neo.config.useServiceWorker is set to true
* @class Neo.main.addon.ServiceWorker
* @extends Neo.core.Base
* @singleton
*/
class ServiceWorker extends Base {
static getConfig() {return {
/**
* @member {String} className='Neo.main.addon.ServiceWorker'
* @protected
*/
className: 'Neo.main.addon.ServiceWorker',
/**
* @member {Boolean} singleton=true
* @protected
*/
singleton: true
}}
/**
* @param {Object} config
*/
construct(config) {
if ('serviceWorker' in navigator) {
let me = this,
config = Neo.config,
devMode = config.environment === 'development',
fileName = devMode ? 'ServiceWorker.mjs' : 'serviceworker.js',
folder = window.location.pathname.includes('/examples/') ? 'examples/' : 'apps/',
opts = devMode ? {type: 'module'} : {},
path = (devMode ? config.basePath : config.workerBasePath) + (devMode ? folder : '') + fileName,
serviceWorker = navigator.serviceWorker;
window.addEventListener('beforeunload', me.onBeforeUnload.bind(me));
serviceWorker.register(path, opts)
.then(registration => {
serviceWorker.ready.then(() => {
serviceWorker.onmessage = WorkerManager.onWorkerMessage.bind(WorkerManager);
WorkerManager.sendMessage('service', {
action: 'registerNeoConfig',
data : config
});
});
})
}
}
/**
*
*/
onBeforeUnload() {
WorkerManager.sendMessage('service', {
action: 'unregisterPort'
});
}
}
Neo.applyClassConfig(ServiceWorker);
let instance = Neo.create(ServiceWorker);
Neo.applyToGlobalNs(instance);
export default instance;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment