You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.6 KiB
55 lines
1.6 KiB
4 years ago
|
'use strict';
|
||
|
/* global WorkerGlobalScope self */
|
||
|
|
||
|
var _require = require('./log'),
|
||
|
log = _require.log;
|
||
|
|
||
|
function reloadApp(_ref, _ref2) {
|
||
|
var hotReload = _ref.hotReload,
|
||
|
hot = _ref.hot,
|
||
|
liveReload = _ref.liveReload;
|
||
|
var isUnloading = _ref2.isUnloading,
|
||
|
currentHash = _ref2.currentHash;
|
||
|
|
||
|
if (isUnloading || !hotReload) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (hot) {
|
||
|
log.info('[WDS] App hot update...');
|
||
|
|
||
|
var hotEmitter = require('webpack/hot/emitter');
|
||
|
|
||
|
hotEmitter.emit('webpackHotUpdate', currentHash);
|
||
|
|
||
|
if (typeof self !== 'undefined' && self.window) {
|
||
|
// broadcast update to window
|
||
|
self.postMessage("webpackHotUpdate".concat(currentHash), '*');
|
||
|
}
|
||
|
} // allow refreshing the page only if liveReload isn't disabled
|
||
|
else if (liveReload) {
|
||
|
var rootWindow = self; // use parent window for reload (in case we're in an iframe with no valid src)
|
||
|
|
||
|
var intervalId = self.setInterval(function () {
|
||
|
if (rootWindow.location.protocol !== 'about:') {
|
||
|
// reload immediately if protocol is valid
|
||
|
applyReload(rootWindow, intervalId);
|
||
|
} else {
|
||
|
rootWindow = rootWindow.parent;
|
||
|
|
||
|
if (rootWindow.parent === rootWindow) {
|
||
|
// if parent equals current window we've reached the root which would continue forever, so trigger a reload anyways
|
||
|
applyReload(rootWindow, intervalId);
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
function applyReload(rootWindow, intervalId) {
|
||
|
clearInterval(intervalId);
|
||
|
log.info('[WDS] App updated. Reloading...');
|
||
|
rootWindow.location.reload();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module.exports = reloadApp;
|