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;