choo-service-worker
Version:
Service worker plugin for choo
35 lines (28 loc) • 1.09 kB
JavaScript
var mutate = require('xtend/mutable')
var assert = require('assert')
module.exports = serviceWorker
var events = serviceWorker.events = {
INSTALLED: 'sw:installed',
ERROR: 'log:error'
}
function serviceWorker (name, opts) {
name = name || '/sw.js'
opts = opts || {}
assert.equal(typeof name, 'string', 'choo-service-worker: name should be type string')
assert.equal(typeof opts, 'object', 'choo-service-worker: opts should be type object')
return function (state, emitter) {
assert.equal(typeof state, 'object', 'choo-service-worker: state should be type object')
assert.equal(typeof emitter, 'object', 'choo-service-worker: emitter should be type object')
emitter.on(state.events.DOMCONTENTLOADED, function () {
opts = mutate({ scope: '/' }, opts)
if (navigator.serviceWorker) {
navigator.serviceWorker.register(name, opts)
.then(function (registration) {
emitter.emit(events.INSTALL, registration)
}).catch(function (err) {
emitter.emit(events.ERROR, err)
})
}
})
}
}