From b782c0aec11ccd9c30bad69e9de0f4f649190485 Mon Sep 17 00:00:00 2001 From: coderaiser Date: Thu, 1 Nov 2018 19:20:55 +0200 Subject: [PATCH] fix(cloudcmd) register service worker on http connection (#203) --- client/cloudcmd.js | 4 +++- client/sw/register.js | 11 +++++------ client/sw/register.spec.js | 22 ++++++++++++++++++++++ 3 files changed, 30 insertions(+), 7 deletions(-) diff --git a/client/cloudcmd.js b/client/cloudcmd.js index be53ed08..13d1d27e 100644 --- a/client/cloudcmd.js +++ b/client/cloudcmd.js @@ -11,6 +11,7 @@ const load = require('load.js'); const { registerSW, + listenSW, } = require('./sw/register'); // prevent additional loading of emitify @@ -65,5 +66,6 @@ async function register(config) { const {prefix} = config; const sw = await registerSW(prefix); - sw.addEventListener('updatefound', onUpdateFound(config)); + listenSW(sw, 'updatefound', onUpdateFound(config)); } + diff --git a/client/sw/register.js b/client/sw/register.js index 0f295891..1ea669a9 100644 --- a/client/sw/register.js +++ b/client/sw/register.js @@ -3,7 +3,9 @@ module.exports.registerSW = registerSW; module.exports.unregisterSW = unregisterSW; -const noop = () => {}; +module.exports.listenSW = (sw, ...args) => { + sw && sw.addEventListener(...args); +}; async function registerSW(prefix) { if (!navigator.serviceWorker) @@ -13,15 +15,12 @@ async function registerSW(prefix) { const isLocalhost = location.hostname === 'localhost'; if (!isHTTPS && !isLocalhost) - return { - addEventListener: noop, - }; + return; return navigator.serviceWorker.register(`${prefix}/sw.js`); } - async function unregisterSW() { const reg = await registerSW(); - return reg.unregister(); + reg && reg.unregister(); } diff --git a/client/sw/register.spec.js b/client/sw/register.spec.js index 5b42ad0a..84e8c333 100644 --- a/client/sw/register.spec.js +++ b/client/sw/register.spec.js @@ -3,6 +3,28 @@ const test = require('tape'); const sinon = require('sinon'); const mock = require('mock-require'); +const tryCatch = require('try-catch'); + +test('sw: listen', (t) => { + const {listenSW} = mock.reRequire('./register'); + const addEventListener = sinon.stub(); + const sw = { + addEventListener, + }; + + listenSW(sw, 'hello', 'world'); + + t.ok(addEventListener.calledWith('hello', 'world'), 'should call addEventListener'); + t.end(); +}); + +test('sw: lesten: no sw', (t) => { + const {listenSW} = mock.reRequire('./register'); + const [e] = tryCatch(listenSW, null, 'hello', 'world'); + + t.notOk(e, 'should not throw'); + t.end(); +}); test('sw: register: registerSW: no serviceWorker', async (t) => { const {navigator} = global;