| 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; |