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.
72 lines
2.0 KiB
72 lines
2.0 KiB
import hotEmitter from "webpack/hot/emitter.js"; |
|
import { log } from "./log.js"; |
|
/** @typedef {import("../index").Options} Options |
|
/** @typedef {import("../index").Status} Status |
|
|
|
/** |
|
* @param {Options} options |
|
* @param {Status} status |
|
*/ |
|
|
|
function reloadApp(_ref, status) { |
|
var hot = _ref.hot, |
|
liveReload = _ref.liveReload; |
|
|
|
if (status.isUnloading) { |
|
return; |
|
} |
|
|
|
var currentHash = status.currentHash, |
|
previousHash = status.previousHash; |
|
var isInitial = currentHash.indexOf( |
|
/** @type {string} */ |
|
previousHash) >= 0; |
|
|
|
if (isInitial) { |
|
return; |
|
} |
|
/** |
|
* @param {Window} rootWindow |
|
* @param {number} intervalId |
|
*/ |
|
|
|
|
|
function applyReload(rootWindow, intervalId) { |
|
clearInterval(intervalId); |
|
log.info("App updated. Reloading..."); |
|
rootWindow.location.reload(); |
|
} |
|
|
|
var search = self.location.search.toLowerCase(); |
|
var allowToHot = search.indexOf("webpack-dev-server-hot=false") === -1; |
|
var allowToLiveReload = search.indexOf("webpack-dev-server-live-reload=false") === -1; |
|
|
|
if (hot && allowToHot) { |
|
log.info("App hot update..."); |
|
hotEmitter.emit("webpackHotUpdate", status.currentHash); |
|
|
|
if (typeof self !== "undefined" && self.window) { |
|
// broadcast update to window |
|
self.postMessage("webpackHotUpdate".concat(status.currentHash), "*"); |
|
} |
|
} // allow refreshing the page only if liveReload isn't disabled |
|
else if (liveReload && allowToLiveReload) { |
|
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); |
|
} |
|
} |
|
}); |
|
} |
|
} |
|
|
|
export default reloadApp; |