fix(sw) register when prefix changed

This commit is contained in:
coderaiser 2018-06-18 23:28:39 +03:00
parent 71c65d7354
commit 75f6fac284
5 changed files with 33 additions and 56 deletions

View file

@ -11,7 +11,6 @@ const exec = require('execon');
const Images = require('./dom/images');
const {
registerSW,
unregisterSW,
} = require('./sw/register');
@ -46,8 +45,6 @@ function CloudCmdProto(Util, DOM) {
console.log(str);
};
registerSW();
Emitify.call(this);
const CloudCmd = this;

View file

@ -5,6 +5,10 @@ require('../css/nojs.css');
require('../css/columns/name-size-date.css');
require('../css/columns/name-size.css');
const {
registerSW,
} = require('./sw/register');
// prevent additional loading of emitify
window.Emitify = require('emitify/legacy');
@ -17,6 +21,8 @@ module.exports = window.CloudCmd = (config) => {
window.DOM = DOM;
window.CloudCmd = require('./client');
registerSW(config.prefix);
const prefix = getPrefix(config.prefix);

View file

@ -1,11 +1,10 @@
'use strict';
const runtime = require('serviceworker-webpack-plugin/lib/runtime');
module.exports.registerSW = registerSW;
module.exports.unregisterSW = unregisterSW;
async function registerSW() {
async function registerSW(prefix) {
prefix = prefix ? `/${prefix}/` : `/`;
if (!navigator.serviceWorker)
return;
@ -15,7 +14,7 @@ async function registerSW() {
if (!isHTTPS && !isLocalhost)
return;
return runtime.register();
return navigator.serviceWorker.register(`${prefix}sw.js`);
}
async function unregisterSW() {

View file

@ -4,27 +4,19 @@ const test = require('tape');
const sinon = require('sinon');
const mock = require('mock-require');
const SERVICE_WORKER = 'serviceworker-webpack-plugin/lib/runtime';
test('sw: register: registerSW: no serviceWorker', async (t) => {
const {navigator} = global;
global.navigator = {};
const register = sinon.stub();
mock(SERVICE_WORKER, {
register
});
const {
registerSW,
} = mock.reRequire('./register');
await registerSW();
mock.stop(SERVICE_WORKER);
global.navigator = navigator;
t.notOk(register.called, 'should not call register');
t.pass('should not call register');
t.end();
});
@ -34,28 +26,22 @@ test('sw: register: registerSW: no https', async (t) => {
location,
} = global;
global.navigator = {
serviceWorker: true
};
const register = sinon.stub();
global.navigator = getNavigator({
register,
});
global.location = {
protocol: 'http:'
};
const register = sinon.stub();
mock(SERVICE_WORKER, {
register
});
const {
registerSW,
} = mock.reRequire('./register');
await registerSW();
mock.stop(SERVICE_WORKER);
global.location = location;
global.navigator = navigator;
@ -69,10 +55,6 @@ test('sw: register: registerSW: no localhost', async (t) => {
location,
} = global;
global.navigator = {
serviceWorker: true
};
global.location = {
protocol: 'http:',
hostname: 'cloudcmd.io',
@ -80,8 +62,8 @@ test('sw: register: registerSW: no localhost', async (t) => {
const register = sinon.stub();
mock(SERVICE_WORKER, {
register
global.navigator = getNavigator({
register,
});
const {
@ -90,8 +72,6 @@ test('sw: register: registerSW: no localhost', async (t) => {
await registerSW();
mock.stop(SERVICE_WORKER);
global.location = location;
global.navigator = navigator;
@ -105,18 +85,14 @@ test('sw: register: registerSW', async (t) => {
location,
} = global;
global.navigator = {
serviceWorker: true
};
global.location = {
hostname: 'localhost',
};
const register = sinon.stub();
mock(SERVICE_WORKER, {
register
global.navigator = getNavigator({
register,
});
const {
@ -125,8 +101,6 @@ test('sw: register: registerSW', async (t) => {
await registerSW();
mock.stop(SERVICE_WORKER);
global.location = location;
global.navigator = navigator;
@ -140,10 +114,6 @@ test('sw: register: unregisterSW', async (t) => {
location,
} = global;
global.navigator = {
serviceWorker: true
};
global.location = {
hostname: 'localhost',
};
@ -155,8 +125,8 @@ test('sw: register: unregisterSW', async (t) => {
const register = sinon.stub()
.returns(Promise.resolve(reg));
mock(SERVICE_WORKER, {
register
global.navigator = getNavigator({
register,
});
const {
@ -165,8 +135,6 @@ test('sw: register: unregisterSW', async (t) => {
await unregisterSW();
mock.stop(SERVICE_WORKER);
global.location = location;
global.navigator = navigator;
@ -174,3 +142,14 @@ test('sw: register: unregisterSW', async (t) => {
t.end();
});
function getNavigator({register, unregister}) {
unregister = unregister || sinon.stub();
return {
serviceWorker: {
register,
unregister,
}
};
}

View file

@ -265,10 +265,6 @@ function _setUrl(pref, req, res, next) {
function _setSW(pref, req, res, next) {
const prefix = getPrefix(pref);
const is = !req.url.indexOf(prefix);
if (!is)
return next();
const url = replacePrefix(req.url, prefix);
const isSW = /^\/sw\.js(\.map)?$/.test(url);